Core Data
で厄介な問題がありました。私のアプリはiPhoneから連絡先を取得し、それを私のデータベースに保存する必要があります。私はバックグラウンドスレッドでそれをしようとしています。 AppDelegateでコアデータが列挙されているうちに突然変異しました
[self performSelectorInBackground:@selector(fetchingContact) withObject:nil];
-(void)fetchingContact{
// Some Code
for (int i = 0; i < nPeople; i++)
{
//Some Code
NSManagedObjectContext *context = [APP_DELEGATE managedObjectContext];
ABRecordID recordID = ABRecordGetRecordID(person);
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(contactId = '%d')",recordID]];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
//crash
NSArray *contactObjArray = [context executeFetchRequest:fetchRequest error:&error];
//crash
if (error) {}
Contact *contacts;
if (contactObjArray.count == 0) {
contacts = [NSEntityDescription insertNewObjectForEntityForName:@"Contact" inManagedObjectContext:context];
}else {
contacts = [contactObjArray objectAtIndex:0];
}
//Some Code
}
}
:ここ
- (NSManagedObjectContext *)managedObjectContext
{
NSLog(@"managedObjectContext");
// Returns ;the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (!coordinator) {
return nil;
}
_managedObjectContext = [[NSManagedObjectContext alloc]initWithConcurrencyType: NSMainQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
return _managedObjectContext;
}
私は私のCore Data
に保存しようとするが、それはエラーでクラッシュ:
私はそのためのコード上で使用
*終了アプリによるキャッチされない例外に 'NSGenericException'、理由:「*コレクション< __NSCFSet:0x15fad880>は、この行でenumerated.'`ながら変異させた:私はすでにオンライン検索
NSArray *contactObjArray = [context executeFetchRequest:fetchRequest error:&error];
、私が見つかりました。多くのものが何も私を助けません。私がそれを実行すると、Core Data
が変更された場所、またはContactエンティティがありません。これは非常に奇妙なエラーです。私はメインスレッドで実行した場合
は、私は、エラー/ノークラッシュを取得しませんが、アプリが(実行中)、その時点で終了している場合、私はContact
してください、任意のヘルプのすべてのコンテンツを失います。より多くの情報が必要な場合は教えてください。
例外を送出するのは、どの回線ですか?例外ブレイブポイントを設定する – Paulw11
私はただ編集するだけです。申し訳ありませんが、私はラインを特定することを忘れています。私は毎回クラッシュすることはありません。自発的に接触150,200,300でクラッシュする可能性があります。 –
executeFetchRequestの結果をcontactObjArray == nilで確認してから、エラーを確認してください。また、[NSString stringWithFormat:...]引数は不要です。[NSPredicate predicateWithFormat:] – DDP