Codes scheint lange, aber die Idee ist einfach. Zuerst in der refreshResult(), holen Sie sich die Daten von NSUserDefaults (tempArray), hängen Sie dann die Daten vom Server an tempArray an, speichern Sie zuletzt das tempArray zurück zu NSUserDefaults. Holen Sie als zweites in loadChat() die Daten von NSUserDefaults und verwenden Sie die Daten, um die Chat-Ansicht zu erstellen. Alles funktioniert perfekt, wenn ich das Ergebnis aktualisiere, kann ich die Nachricht und das Bild in der Chat-Ansicht sehen. Wenn ich jedoch erzwinge, die Anwendung zu deaktivieren und die Anwendung erneut zu öffnen, verschwinden die Daten, die gerade in Aktualisierungsergebnis geladen wurden. Wirklich kann nicht herausfinden, warum.NSUserDefault-Daten können nicht gespeichert werden, wenn das Schließen der Anwendung erzwungen wird. Swift
UPDATE
Ich bin ziemlich sicher, dass Objekte! ist nicht leer, da ich drei Drucke verwende: "1", "2", "3". realen Fall von dem, was er druckt, ich loadChat bevor refreshResult als refreshResult nur aufgerufen werden, wenn eine neue Nachricht ist
// loadChat before refresh
3: 59
3: 59
3: 39
3: 21
// send a message from another phone
1: 59
1: 59
1: 39
1: 21
2: 60
2: 60
2: 40
2: 21
// force to close the application(double click home button and swipe up)
// then open the app again
3: 59
3: 59
3: 39
3: 21
func refreshResult() {
//**empty the messageArray, senderArray and photoArray
...
query.findObjectsInBackgroundWithBlock { (objects: [PFObject]?, error: NSError?) -> Void in
for object in objects! {
self.senderArray.append(object.objectForKey("sender") as! String)
self.messageArray.append(object.objectForKey("message") as? String)
if object.objectForKey("photo") != nil {
if let converyPFFile = object.objectForKey("photo") as? PFFile{
let temp = try! converyPFFile.getData()
let image = UIImage(data: temp)!
self.photoArray.append(image)
}
} else {
self.photoArray.append(nil)
}
if object.objectForKey("sender") as! String == self.userProfileName {
object.setObject(true, forKey: "senderDownloaded")
} else {
object.setObject(true, forKey: "otherDownloaded")
}
object.saveInBackground()
}
if objects!.count != 0 {
var tempLocalNameArray = [String]()
var tempLocalIsStringArray = [Bool]()
var tempLocalMessageArray = [String]()
var tempLocalImageArray = [NSData]()
if NSUserDefaults.standardUserDefaults().objectForKey("NameArray") != nil {
tempLocalNameArray = NSUserDefaults.standardUserDefaults().objectForKey("NameArray") as! [String]
}
if NSUserDefaults.standardUserDefaults().objectForKey("IsStringArray") != nil {
tempLocalIsStringArray = NSUserDefaults.standardUserDefaults().objectForKey("IsStringArray") as! [Bool]
}
if NSUserDefaults.standardUserDefaults().objectForKey("MessageArray") != nil {
tempLocalMessageArray = NSUserDefaults.standardUserDefaults().objectForKey("MessageArray") as! [String]
}
if NSUserDefaults.standardUserDefaults().objectForKey("ImageArray") != nil {
tempLocalImageArray = NSUserDefaults.standardUserDefaults().objectForKey("ImageArray") as! [NSData]
}
print("1: \(tempLocalNameArray.count)")
print("1: \(tempLocalIsStringArray.count)")
print("1: \(tempLocalMessageArray.count)")
print("1: \(tempLocalImageArray.count)")
for i in 0 ..< self.senderArray.count {
tempLocalNameArray.append(self.senderArray[i])
if self.messageArray[i] != nil {
tempLocalIsStringArray.append(true)
tempLocalMessageArray.append(self.messageArray[i]!)
} else {
tempLocalIsStringArray.append(false)
let pngImageData = UIImagePNGRepresentation(self.photoArray[i]!)
tempLocalImageArray.append(pngImageData!)
}
}
print("2: \(tempLocalNameArray.count)")
print("2: \(tempLocalIsStringArray.count)")
print("2: \(tempLocalMessageArray.count)")
print("2: \(tempLocalImageArray.count)")
NSUserDefaults.standardUserDefaults().setObject(tempLocalNameArray, forKey: "NameArray")
NSUserDefaults.standardUserDefaults().setObject(tempLocalIsStringArray, forKey: "IsStringArray")
NSUserDefaults.standardUserDefaults().setObject(tempLocalMessageArray, forKey: "MessageArray")
NSUserDefaults.standardUserDefaults().setObject(tempLocalImageArray, forKey: "ImageArray")
NSUserDefaults.standardUserDefaults().synchronize()
}
self.loadChat()
}
}
func loadChat() {
var tempLocalNameArray = [String]()
var tempLocalIsStringArray = [Bool]()
var tempLocalMessageArray = [String]()
var tempLocalImageArray = [NSData]()
if NSUserDefaults.standardUserDefaults().objectForKey("NameArray") != nil {
tempLocalNameArray = NSUserDefaults.standardUserDefaults().objectForKey("NameArray") as! [String]
}
if NSUserDefaults.standardUserDefaults().objectForKey("IsStringArray") != nil {
tempLocalIsStringArray = NSUserDefaults.standardUserDefaults().objectForKey("IsStringArray")! as! [Bool]
}
if NSUserDefaults.standardUserDefaults().objectForKey("MessageArray") != nil {
tempLocalMessageArray = NSUserDefaults.standardUserDefaults().objectForKey("MessageArray")! as! [String]
}
if NSUserDefaults.standardUserDefaults().objectForKey("ImageArray") != nil {
tempLocalImageArray = NSUserDefaults.standardUserDefaults().objectForKey("ImageArray")! as! [NSData]
}
print("3: \(tempLocalNameArray.count)")
print("3: \(tempLocalIsStringArray.count)")
print("3: \(tempLocalMessageArray.count)")
print("3: \(tempLocalImageArray.count)")
//**use the tempLocalNameArray, tempLocalIsStringArray, tempLocalMessageArray and tempLocalImageArray to create a chat view.
Bitte stellen Sie eine [MVCE] (http://stackoverflow.com/help/mcve) mit Schwerpunkt auf dem *** M ***. – nhgrif