コードは長く見えますが、そのアイデアは簡単です。まずrefreshResult()でNSUserDefaults(tempArray)からデータを取得し、サーバーからロードされたデータをtempArrayに追加し、最後にtempArrayをNSUserDefaultsに保存し直します。次にloadChat()でNSUserDefaultsからデータを取得し、データを使用してチャットビューを作成します。結果をリフレッシュするとすべてが完璧に機能し、チャットビューでメッセージと画像を見ることができます。しかし、アプリケーションをオフにしてアプリケーションを再度開くと、リフレッシュ結果にロードされたばかりのデータが消えます。本当に理由を知ることはできません。アプリケーションを強制終了するとNSUserDefaultデータを保存できません。 Swift
UPDATE
私はかなり確信してオブジェクトよ! 「1」、「2」、「3」の3つのプリントを使用しているので空ではありません。それが印刷さ何の レアル場合、私はあなただけNSUserDefaults
query.findObjectsInBackgroundWithBlock
場合を返すオブジェクトからオブジェクトをつかんでいる新しいメッセージ
// 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.
[MVCE](http: *** M ***を重視しています。 – nhgrif