이 핵심 데이터 오류가 발생했습니다.핵심 데이터 + '문이 여전히 활성 상태입니다.'
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'statement is still active'
매우 빠르게 요청을 호출 할 때를 제외하고 내 앱과 코드는 모두 정상적으로 작동합니다. 내가 앱을 해독하려고 할 때 발생합니다. 한 화면에서 다음 화면으로 이동하여 데이터를 다운로드하고 패치 요청을 실행합니다.
스레딩 및 코어 데이터와 관련이 있다는 것을 알고 있습니다.
나는이 코드를 백그라운드 스레드에서 호출하며 자체 관리 객체 컨텍스트를 사용합니다.
+ (AN_User *)updateWithRecord:(NSDictionary *)record moc:(NSManagedObjectContext *)moc{
NSNumber *userID = nil;
NSString *username = nil;
if([record objectForKey:@"user_id"]){
userID = [NSNumber numberWithInt:[[record objectForKey:@"user_id"] intValue]];
}else if([record objectForKey:@"id_member"]){
userID = [NSNumber numberWithInt:[[record objectForKey:@"id_member"] intValue]];
}
if([record objectForKey:@"username"]){
username = [NSString stringWithFormat:@"%@", [record objectForKey:@"username"]];
}else if([record objectForKey:@"member_name"]){
username = [NSString stringWithFormat:@"%@", [record objectForKey:@"member_name"]];
}
if(!userID||!username){
return nil;
}
__block AN_User *user = nil;
[moc performBlockAndWait:^{
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"AN_User" inManagedObjectContext:moc];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(user_id == %@) OR (username == %@)", userID, username];
[request setPredicate:predicate];
if([moc countForFetchRequest:request error:nil]==0){
user = (AN_User *)[NSEntityDescription insertNewObjectForEntityForName:@"AN_User" inManagedObjectContext:moc];
}else{
NSArray *fetchResults = [moc executeFetchRequest:request error:nil];
if(fetchResults.count>0){
user = [fetchResults objectAtIndex:0];
}
}
if(user){
user.user_id = userID;
user.username = username.lowercaseString;
//Parse profile image url
NSString *avatar = [record objectForKey:@"avatar"];
NSString *fileName = [record objectForKey:@"filename"];
if([avatar isKindOfClass:[NSString class]]&&avatar.length>0){
user.profile_image_url = [NSString stringWithFormat:@"%@", avatar];
}else if([fileName isKindOfClass:[NSString class]]&&fileName.length>0){
user.profile_image_url = [NSString stringWithFormat:@"http://www.example.com/forum/avs/%@", fileName];
}
if([record objectForKey:@"gpbp_respect"]){
user.respect = [NSNumber numberWithFloat:[[record objectForKey:@"gpbp_respect"] floatValue]];
}
}
}];
return user;
}
나는 그냥이에서에게 아마 힘들 이해하지만, 내가 뭔가 잘못하고 있어요 경우 사람이 이러한 요청과 함께, 그 즉시 분명하다, 나를 알 수 있습니다.
[예외 중단 점 추가] (http://stackoverflow.com/questions/4961770/run-stop-on-objective-c-exception-in-xcode-4). 오류를 다시 트리거하십시오. 디버그 탐색기에서 스택 추적을 복사하여 질문에 붙여 넣으십시오. –
감사합니다. 이 작업을 시도했지만 오류를 복제 할 수 없습니다. 나는 어쨌든 그것을 고쳤다 고 생각한다. –