我对这个核心数据错误感到很不舒服.
*** 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; }
我知道这可能很难说,但是有人能告诉我,如果我做错了,这些请求,这是显而易见的.