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'으로 인해 앱 종료, 이유 : '* 컬렉션 <__ NSCFSet : 0x15fad880>이 (가) 열거되는 동안 변경되었습니다 .'`이 줄에서 :
NSArray *contactObjArray = [context executeFetchRequest:fetchRequest error:&error];
이미 온라인에서 검색했는데 많은 것을 찾았지만 도움이되지 않습니다. 그것을 실행하면 핵심 데이터가 변경되거나 연락처 엔터티가 변경되는 곳이 없습니다. 이 오류는 매우 이상합니다.
메인 스레드에서 실행하면 오류가 발생하지 않거나 충돌이 발생하지 않지만 해당 시간에 앱이 종료되면 (실행되는 동안) 모든 콘텐츠가 손실됩니다. Contact
제발 도와주세요. 더 많은 정보를 제공해야하는지 알려주세요.
이 오류는 핵심 데이터를 가져 오려고하는 동안 수정할 때 발생합니다.
또한 수행중인 루프의 원인이 될 수 있습니다. 다른 검색을 수행하기 전에 저장하지 않고 coredata에 새 객체를 삽입합니다. managedobjectcontext를 저장하십시오.
마음에 드는 코어 데이터에 성가신 문제가 있습니다. 내 앱은 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
}
}
그래도 문제가 해결되지 않으면 메서드가 여러 번 호출되었는지 확인하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다