Kodlar uzun görünüyor, ancak fikir basit. Önce refreshResult() 'da, verileri NSUserDefaults (tempArray)' dan alın, daha sonra sunucudan tempArray'e yüklenen verileri ekleyin, tempArray'i en son NSUserDefaults'a kaydedin. LoadChat() 'da ikinci, NSUserDefaults verileri alın ve sohbet görünümünü oluşturmak için verileri kullanın. Sonucu yenilediğimde her şey mükemmel çalışıyor, mesaj ve görüntüyü sohbet görünümünde görebiliyorum. Ancak, uygulamayı kapatmaya ve uygulamayı tekrar açmaya zorladığımda, yenileme sonucuna yeni yüklenen veriler ortadan kalkar. Gerçekten nedenini bulamıyorsun.NSUserDefault verileri kaydedilemez. Swift
GÜNCELLEME
Ben oldukça emin nesneleri duyuyorum! Üç baskı kullandığım için boş değil: "1", "2", "3". Yeni bir ileti
// 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.
Lütfen bir [MVCE] belirtin (http:/*** M *** ile vurgulayarak /stackoverflow.com/help/mcve). – nhgrif