0

私は少し面倒です。コンテキストの新しいバージョンを作成し、それをデフォルトのものにしました。その後、アップルのドキュメントに従ってコードを変更しました。今は次のようになります。

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{

    if (persistentStoreCoordinator != nil)
    {
        return persistentStoreCoordinator;
    }
    NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"database.sqlite"];
    NSPersistentStoreCoordinator *psc = persistentStoreCoordinator;
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];


    BOOL success = [psc addPersistentStoreWithType:NSSQLiteStoreType
                                     configuration:nil URL:storeURL
                                           options:options error:&error];
    if (!success) {
        NSLog(@"Unresolved Error");
        abort();
    }

    return persistentStoreCoordinator;
}

しかし、1:1 の同じコードであってもエラーが発生しますBOOL sucessincompatible pointer to integer conversion 'BOOL' with 'NSPersistentstore'

どういうわけかマッピングは機能しましたが、新しいモデルを取得すると、5回のうち4回は機能し、5回目はその行にエラーがスローされます。

それを修正する方法はありますか?

更新コードを少し変更しましたが、今はそのように見えます

NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType
                                     configuration:nil URL:storeURL
                                           options:options error:&error];
if (!store) {
        NSLog(@"Unresolved Error");
        abort();
}
4

1 に答える 1

2

警告とエラーは 2 つの別個のものです。

警告は、ポインターを数値であるかのように扱っていることです。 (本質的には数値) を返さaddPersistentStoreWithType:configuration:URL:options:errorず、作成中のオブジェクトを返します。ブール成功変数の代わりに、結果を変数に割り当てる必要があります。BOOLNSPersistentStoreNSPersistentStore *

失敗した場合は、返さnilれてオブジェクトが移入されerrorます。ロギングなど、このオブジェクトからエラーに関する詳細情報を取得できますlocalizedDescription

于 2012-05-22T10:04:35.893 に答える