パーセからすべてのデータを取得し、このデータを電話機のコアデータと同期しようとしています。私は現在、正しく実行されていないフェッチ要求に少し問題があります。私は、異なるタスクのためにmanagedObjectContextを使用しているという理由があると思いますが、これを修正する方法は実際にはわかりません。コアデータ内のオブジェクトをフェッチしようとするとエラーが発生しました " - [NSArrayIエンティティ]:インスタンスに送信されたセレクタが認識されません"
問題が発生した場所を私のコードで明確に示しています。私のコードがクラッシュすることはないが、ログにエラーが表示されるだけで、それは非常に奇妙です。 (私は、コードの下にログに表示する結果を入れている)
これは私のコードです:
// CORE DATA UPDATE
for var i = 0; i < self.messages.count; i++ {
let entity = NSEntityDescription.entityForName("Groups", inManagedObjectContext: self.managedObjectContext)
let newGroup = Groups(entity: entity!, insertIntoManagedObjectContext: self.managedObjectContext)
newGroup.groupId = self.messages[i].groupId
newGroup.updatedAt = NSDate()
newGroup.groupName = self.messages[i].groupName
self.messages[i].imageFile.getDataInBackgroundWithBlock({ (imageData, error) -> Void in
if error == nil{
newGroup.photo = imageData
}else{
print(error)
}
})
newGroup.lastMessage = self.messages[i].message
let usersRelationship = newGroup.mutableSetValueForKey("Users")
let arrayMembers = self.dictionaryGroupIds[self.messages[i].groupId]! as [String]
print(arrayMembers)
for member in arrayMembers {
print(member)
print("CODE IS STOPPING HERE ")
// MY CODE STOPS HERE
// When I want to print the members in the arraymembers, it never displays all the member, sometimes it is only one member than it is 3 members, but never all of them so
let fetchRequest = NSFetchRequest(entityName: "Users")
fetchRequest.predicate = NSPredicate(format: "username = %@", member)
fetchRequest.returnsObjectsAsFaults = false
do {
let result = try self.managedObjectContext.executeFetchRequest(fetchRequest)
usersRelationship.addObject(result)
}catch{
let fetchError = error as NSError
print("\(fetchError), \(fetchError.userInfo)")
}
}
do {
// This get never printed to the log
print("SUCCESS")
try newGroup.managedObjectContext?.save()
} catch {
let saveError = error as NSError
print("\(saveError), \(saveError.userInfo)")
print("CRASH")
}
}
}
これは、ログに表示されますものです:
2016-03-28 08:51:09.511 WeGrupp[1268:35749] Warning: A long-running operation is being executed on the main thread.
Break on warnBlockingOperationOnMainThread() to debug.
2016-03-28 08:51:09.823 WeGrupp[1268:35749] Warning: A long-running operation is being executed on the main thread.
Break on warnBlockingOperationOnMainThread() to debug.
["[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"]
[email protected]
CODE IS STOPPING HERE
2016-03-28 08:51:10.140 WeGrupp[1268:35749] -[__NSArrayI entity]: unrecognized selector sent to instance 0x7fb0eb4d5c60
2016-03-28 08:51:10.143 WeGrupp[1268:35749] Warning: A long-running operation is being executed on the main thread.
Break on warnBlockingOperationOnMainThread() to debug.
だから、これはそれは同時性とは関係があると思いますが、残念ながら私の質問に対する答えは見つけられませんでした。私は他のフォーラムにいましたが、誰も適切な答えを提供することはできませんでした。
感謝
あなたは警告が示唆何をしようと、それが発生しています場所を確認するためにwarnBlockingOperationOnMainThreadに休憩を入れていますか?それにもかかわらず、私はnewGroup変数が変わっても写真をバックグラウンドで設定しようとしていると思われます。 – Michael
CoreDataに写真を保存しようとしていますか?おそらく、MOCを保存した後で、バックグラウンドでロードされているように正しく動作しません。 – Michael
あなたのお手伝いをしてくれてマイケルが、私は本当にそれを得ることができないので、あなたが思うことについてより正確にすることができます。 実際に私がやっているのは、グループの一部であるすべてのユーザーを、同じビューの上にあるこのコードの上に追加しただけでリンクすることです。私はユーザーとグループの間に多対多の関係を作りました。各グループには多くのユーザーがいて、各ユーザーには多数のグループを割り当てることができます – C00kieMonsta