1

への挿入がCore Data突然機能しなくなりました。persistentStoreCoordinator次のコードを使用してセットアップしました。urlであることに注意してくださいSpot.sqlite

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

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

    return _persistentStoreCoordinator;
}

アプリを実行し、実行します

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_METADATA

これは、マネージド オブジェクト コンテキストにオブジェクトを挿入するために使用するコードです。

+ (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"];
    }
}

このコードをステップ実行すると、期待どおりに実行されます。エラーは発生しません。それでも、関連する sqlite テーブルは空です。次のコードを実行すると、空の結果セットが返されます。

            ...
            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];  
4

1 に答える 1