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;
}
这是我的代码,在[self deleteObject:obj]我的应用程序挂起
之后手动调试:
NSLog(@"%lu = fetchedObjects, %lu = districtsResponse", (unsigned long)objects.count, (unsigned long)districtsResponse.objects.count);
给出这个结果:
802 = fetchedObjects,47 = districtsResponse
NSLogs in循环给出对象的枚举,总共我们有fetchedObjects和districtsResponse的summ,即使将NSLog放在循环体的末尾。所以它说循环结束了。但该应用程序挂起。那些循环2,它不接触第二个循环,如果我们用deleteObject删除那些循环 - 它可以工作。
答案 0 :(得分:0)
你不能像NS所说的那样继承NSManagedObjectContext:
子类注释 强烈建议您不要继承NSManagedObjectContext。变更跟踪和撤消管理机制经过高度优化,因而错综复杂。插入可能影响processPendingChanges的额外逻辑可能会产生无法预料的后果。在商店迁移等情况下,Core Data将创建NSManagedObjectContext的实例供自己使用。在这些情况下,您不能依赖自定义子类的任何功能。任何NSManagedObject子类必须始终与NSManagedObjectContext完全兼容(也就是说,它不能依赖NSManagedObjectContext的子类的功能)。
答案 1 :(得分:0)
我找到了答案,我们在实体中给出了所需属性的nil值,但无论如何,非常感谢你们