Core Data
我遇到了烦人的问题。我的应用程序需要从iPhone获取联系人并将其保存在我的数据库中。我试图在后台线程中这样做。
我使用上面的代码:
[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
}
}
在AppDelegate中:
- (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'而终止应用程序,原因:'* 集合&lt; __ NSCFSet:0x15fad880&gt;在被列举时被突变。在这一行:
NSArray *contactObjArray = [context executeFetchRequest:fetchRequest error:&error];
我已经在线搜索,我发现很多东西,但没有任何帮助我。当我运行它时,没有Core Data
被更改的地方,或者联系实体。这样做很奇怪。
如果我在主线程中运行它,我没有错误/没有崩溃,但如果应用程序在那段时间退出(执行时),我将丢失Contact
请,任何帮助。告诉我是否需要更多信息。
答案 0 :(得分:1)
当您尝试获取核心数据时,会发生此错误。
这也可能是你正在做的循环的原因,你在coredata中插入一个新对象而不进行保存,然后再进行其他检索。尝试保存您的managedobjectcontext:
喜爱 我对Core Data有一个恼人的问题。我的应用程序需要从iPhone获取联系人并将其保存在我的数据库中。我正试图在后台线程中这样做。
我使用上面的代码:
[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;
NSArray *contactObjArray = [context executeFetchRequest:fetchRequest error:&error];
if (error) {}
Contact *contacts;
if (contactObjArray.count == 0) {
contacts = [NSEntityDescription insertNewObjectForEntityForName:@"Contact" inManagedObjectContext:context];
[context save:&error];
}else {
contacts = [contactObjArray objectAtIndex:0];
}
//Some Code
}
}
如果这不能解决您的问题,可以检查您的方法是否被多次调用。