我正在使用一个NSFetchRequest
上下文中的所有核心数据实体,并将它们移动到另一个上下文中。
只需 1 个实体就可以正常工作。我可以非常快速地遍历结果。然而,该实体与另一个实体有关系,所以我需要运行第二个NSFetchRequest
来获取通过这种关系连接的实体。NSFetchRequest
这是导致崩溃的第二个。崩溃只是使应用程序退出到主屏幕,并且 xcode 日志中没有错误出现。我已经注释掉了我的代码以找出问题所在,并将其归结为:
NSError *error;
NSFileManager *manager = [NSFileManager defaultManager];
NSManagedObjectContext *oldContext = [self version1ManagedObjectContext];
TICDSSynchronizedManagedObjectContext *newContext = [self version1_1ManagedObjectContext];
NSFetchRequest *oldFetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *oldEntryEntity = [NSEntityDescription entityForName:@"Entry"
inManagedObjectContext:oldContext];
[oldFetchRequest setEntity:oldEntryEntity];
[oldFetchRequest setFetchBatchSize:10];
NSArray *entrys = [oldContext executeFetchRequest:oldFetchRequest error:&error];
int totalEntries = [oldContext countForFetchRequest:oldFetchRequest error:nil];
NSLog(@"total entries: %i", totalEntries);
int i = 0;
while (i < totalEntries) {
@autoreleasepool {
Entry *entry = [entrys objectAtIndex:i];
Entry *newEntry = [NSEntityDescription
insertNewObjectForEntityForName:@"Entry"
inManagedObjectContext:newContext];
//Taking out this fetch request means it functions fine
NSFetchRequest *mediaRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *mediaEntity = [NSEntityDescription
entityForName:@"Media"
inManagedObjectContext:oldContext];
[mediaRequest setEntity:mediaEntity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(entry == %@)", entry];
[mediaRequest setPredicate:predicate];
NSArray *mediaItems = [oldContext executeFetchRequest:mediaRequest error:&error];
int totalMediaItems = [oldContext countForFetchRequest:mediaRequest error:nil];
NSLog(@"total media items: %i", totalMediaItems);
int i2 = 0;
while (i2 < totalMediaItems) {
@autoreleasepool {
Media *newMedia = [NSEntityDescription
insertNewObjectForEntityForName:@"Media"
inManagedObjectContext:newContext];
i2++;
}
}
[newContext save:&error];
i++;
}
}
任何想法为什么这可能会使我的应用程序崩溃?
在回答有关我正在尝试做什么的任何问题时 - 我正在尝试在 2 个版本之间迁移数据。使用映射的标准数据迁移不适用于大数据,例如NSData
.