1

Core Data を使用するアプリを開発しています。iOS 5 では問題ありません。

しかし、iOS 4 では、情報を保存しようとするとエラー メッセージが表示されます (正確には、Cocoa エラー 134030 と「そのようなファイルまたはディレクトリはありません」)。ドキュメント フォルダを見ると、SQL ファイルがありません。私はすでにこれをデバッグしましたが、これらのメソッドのいずれもエラーやnilポインターを引き起こしません。

最も奇妙な部分: メソッド addPersistentStoreWithType はエラーを返しませんが、同時に sqlite ファイルは作成されません。

1 行で、私のアプリはドキュメント フォルダーに sql ファイルを作成していません。繰り返しますが、これは iOS 4 でのみ発生します。

アプリが iOS 4 で sqlite ファイルを作成しないのはなぜですか?

//Core Data stack

- (NSManagedObjectContext *)managedObjectContext
{

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
{
    __managedObjectContext = [[NSManagedObjectContext alloc] init];
    [__managedObjectContext setPersistentStoreCoordinator:coordinator];
}

return __managedObjectContext;
}

- (NSManagedObjectModel *)managedObjectModel
{
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Practi" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

if (__managedObjectModel == nil)
{
    NSLog(@"NSManagedObjectModel in AppDelegate == nil");
}

return __managedObjectModel;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyAppDataBase.sqlite"];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
{

    NSLog(@"APPDELEGATE Unresolved error %@, %@", error, [error userInfo]);
}

return __persistentStoreCoordinator;
}

- (NSURL *)applicationDocumentsDirectory
{
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
return [NSURL fileURLWithPath:docsDirectory];
}
4

2 に答える 2

0

私は問題を解決したものを発見しました:

上記の各メソッドが呼び出されたとき、オブジェクトがすでに存在するかどうかを確認するのではなく、オブジェクトを再度作成していました。そのため、コードは現在のように、iOS4でも機能しています。

于 2012-08-26T08:41:16.290 に答える
0

場合によってはmom、ファイルの拡張子を使用する必要がありますmomd。1つ目はファイル用で、2つ目はディレクトリを参照します。

埋め込まれたリソースでmom、ファイルを正しくロードするために拡張ファイルを使用する必要があることがありました(フレームワークからのリソースの場合、ディレクトリはありません)。おそらくこれかもしれません。

于 2012-04-30T15:48:36.657 に答える