TTNetworkDataSource* netSource = [TTNetworkDataSource sharedSource];
[netSource setContext:self];
TTDataSourceResponse* districtsResponse = [netSource requestDataWithQuery:@{@(OBJECT_TYPE): [HotlineDistrict clsName]}];
if (districtsResponse != nil) {
NSArray* objects = [self executeFetchRequestUnsafe:[NSFetchRequest fetchRequestWithEntityName:[HotlineDistrict clsName]] error:&localError];
NSInteger i = 0;
if (localError != nil) {
result = NO; return;
} else {
NSLog(@"%lu = fetchedObjects, %lu = districtsResponse", (unsigned long)objects.count, (unsigned long)districtsResponse.objects.count);
for (NSManagedObject* obj in objects) {
NSLog(@"Deleted Objects in fetched objects %ld", (unsigned long)i++);
[self deleteObject:obj];
}
for (NSManagedObject* obj in districtsResponse.objects) {
NSLog(@"Inserted Object in districtsResponse %ld", (unsigned long)i++);
[self insertObject:obj];
}
}
} else {
localError = [NSError errorInfo:@{NSLocalizedDescriptionKey: @"Error when getting districts."}];
result = NO;
}
TTDataSourceResponse* requestTypeResponse = [netSource requestDataWithQuery:@{@(OBJECT_TYPE): [HotlineRequestType clsName]}];
if (requestTypeResponse != nil) {
NSArray* objects = [self executeFetchRequestUnsafe:[NSFetchRequest fetchRequestWithEntityName:[HotlineRequestType clsName]] error:&localError];
NSInteger j = 0;
if (localError != nil) {
result = NO; return;
} else {
NSLog(@"%lu = fetchedObjects, %lu = requestTypeResponse", (unsigned long)objects.count, (unsigned long)requestTypeResponse.objects.count);
for (NSManagedObject* obj in objects) {
NSLog(@"Deleted Objects in fetched objects %ld", (unsigned long)j++);
[self deleteObject:obj];
}
for (NSManagedObject* obj in requestTypeResponse.objects) {
NSLog(@"Deleted Objects in requestTypeResponse %ld", (unsigned long)j++);
[self insertObject:obj];
}
}
} else {
localError = [NSError errorInfo:@{NSLocalizedDescriptionKey: @"Error when getting request types."}];
result = NO;
}
這裏是我的代碼,[自DeleteObject的:OBJ]後:DeleteObject的掛我的應用程序
NSLog(@"%lu = fetchedObjects, %lu = districtsResponse", (unsigned long)objects.count, (unsigned long)districtsResponse.objects.count);
給這樣的結果:
802我的應用程序被掛起
手動調試= fetchedObjects,47 =區響應
NSLogs在循環中枚舉對象,總的來說,我們有了fetchedObjects和districtsResponse,即使將NSLog放在循環體的末尾也是如此。所以它說這個循環完成得很好。但該應用程序是掛起。那些循環2,它不會觸及第二個循環,如果我們用deleteObject刪除這些循環 - 它就可以工作。
處於Async_Block或其他自己的線程運行此代碼? CoreData在後臺線程中不起作用。 –
你在單獨的for循環中有2個'deleteObject'調用 - 哪一個會導致它掛起? – noobsmcgoobs
克勞斯,我不知道,但我認爲它是在同步線程,在[self performUpdateBlockAndWait:^ {...我的代碼...}]中的所有這種構造; (void)performUpdateBlockAndWait:(void(^)())updateBlock { dispatch_sync(update_queue,updateBlock); } noobsmcgoobs,兩者如果刪除第一個循環,它掛在第二 夥計們,對不起,我的英語,我在新手objc –