核心数据 - 加载问题

时间:2014-08-26 20:10:31

标签: ios core-data

我正在使用核心数据来保存和加载一些包含som二进制数据,字符串和日期的简单实例。保存按预期工作,但是当我将数据加载到我的UITableViewController时,数据被“损坏”,就好像对象中的所有字段都设置为nil一样(包装器对象存在的数量正确,但所有字符串和二进制数据为零,所有日期都设置为1970.01.01 ..) - 这仅在应用程序被杀后才会发生。 应用程序可以转到后台并且数据仍然存在如预期的那样。

我在AppDelegate中创建了Context,StoreCoordinator和Model,这是纯苹果样板代码(来自创建Core Data项目)所以我没有看到那里发生的错误。

重要的是我已经验证了SQLite文件中的数据实际存储是否正确,所以这必须与加载有关。以下是我在UITableView子类中加载数据的方法:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"ScreenshotInfo" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSError *error;
pics = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (!pics) {
    [NSException raise:@"Fetch failed" format:@"reAson: %@",[error localizedDescription]];
}

另一个重要的注意事项是,我没有看到上面的代码是如何出错的,因为我可以创建存储数据的实例,保存它,然后立即转到我的UITableView并看到正在加载的新数据完美。只有杀死应用程序,才会导致这种奇怪的东西。我似乎无法解决这个问题,所以欢迎任何建议。

---------编辑 - 为PersistentStoreCordinator + Model ---------

添加了代码

PersistenStoreCoordinator的实例化:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil)
    {
        return _persistentStoreCoordinator;
    }

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"DogTrack.sqlite"];

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType   configuration:nil URL:storeURL options:options error:&error])
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    }    

    return _persistentStoreCoordinator;
}

模型的实例化:

- (NSManagedObjectModel *)managedObjectModel
{
    if (_managedObjectModel != nil) {
        return _managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return _managedObjectModel;
}

0 个答案:

没有答案