Core data 未插入CoreData对象

Core data 未插入CoreData对象,core-data,Core Data,插入核心数据突然停止工作。 我使用以下代码设置persistentStoreCoordinator。请注意,url是Spot.sqlite 我运行应用程序,然后执行 cd ~/Library/Application Support/iPhone Simulator/7.0/Applications find . -name MyAppName A1DF7916-AE39-4367-BFD2-22A8BAA2AFD2 cd A1DF7916-AE39-4367-BFD2-22A8BAA2AFD2/

插入核心数据突然停止工作。 我使用以下代码设置persistentStoreCoordinator。请注意,url是Spot.sqlite

我运行应用程序,然后执行

cd ~/Library/Application Support/iPhone Simulator/7.0/Applications
find . -name MyAppName
A1DF7916-AE39-4367-BFD2-22A8BAA2AFD2
cd A1DF7916-AE39-4367-BFD2-22A8BAA2AFD2/Documents
ls 
(results) Spot.sqlite                       Spot.sqlite-shm                   Spot.sqlite-wal
sqlite3 Spot.sqlite
sqlite> .tables
ZMYCATEGORY   Z_METADATA    Z_PRIMARYKEY
sqlite> select * from ZMYCATEGORY;
这没有显示任何结果,但是当我选择Z_元数据的内容时,我确实得到了一行输出

这是我用来在托管对象上下文中插入对象的代码:

+ (void)insertParentCategoriesIntoCoreDataFromArray:(NSArray *)array {
    ROAppDelegate *delegate = (ROAppDelegate *)[UIApplication sharedApplication].delegate;
    NSManagedObjectContext *managedObjectContext = [delegate managedObjectContext];

    NSEntityDescription *categoryEntity = [NSEntityDescription entityForName:@"ROCategory" inManagedObjectContext:managedObjectContext];

    for (int i = 0; i < [array count]; i++) {
        ROCategory *category = [[ROCategory alloc] initWithEntity:categoryEntity insertIntoManagedObjectContext:managedObjectContext];
        NSArray *mySQLRow = [array objectAtIndex:i];
        NSString *name = [mySQLRow objectAtIndex:1];
        [category setValue:name forKey:@"name"];
    }
}
我忘了存钱了

我包含了这段代码,它起了作用:

NSError *error = nil;
if (![[((ROAppDelegate *)[UIApplication sharedApplication].delegate) managedObjectContext] save:&error]) {
    // error                                         
}

这里有一个提示:调用应用程序委托以获取托管对象上下文会使您看起来像一个noob。通过堆栈向上传递上下文。当您开始使用多个上下文时,您会发现这更有意义。与其在堆栈中传递上下文,创建一个单例持久性控制器来处理核心数据堆栈的膨胀,创建一个getter来返回要使用的临时上下文,还可以创建另一个方便的方法来保存父上下文,具体取决于您如何设计上下文关系。
            ...
            NSFetchRequest *request = [[NSFetchRequest alloc] init];
            request.predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"name ==[c] \'%@\'", key]]; // the [c] means case-sensitive
            [request setEntity:categoryEntity];

            NSError *error;
            fetchedObjects = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];  
NSError *error = nil;
if (![[((ROAppDelegate *)[UIApplication sharedApplication].delegate) managedObjectContext] save:&error]) {
    // error                                         
}