0

だからこれはひどい。NSDictionaries からの情報をコア データ データベースに入力しようとしています。

以下のコードを使用して UIManaged Document を開きます。完了ハンドラー ブロックは、API から辞書を再帰的に入力し、データベースごとにエンティティを追加するメソッドを呼び出します。

データベースファイルは正常に作成され、辞書は正常に作成され、エンティティオブジェクトも作成されていますが、何らかの理由で情報がデータベースに書き込まれていません。違う。

コンソールに次のメッセージが表示されます。

「NSFileCoordinator: 驚くべきサーバー エラーが通知されました。詳細: 接続が無効です」

メソッド openWithCompletionHandler または saveToURL:forSaveOperation:withCompletionHandler が実行されるたびに。

以下のコードは、スタンフォード大学の iphone コースから切り取って貼り付けたものなのに、なぜ機能しないのか理解できません。

シミュレーターからアプリを削除しようとしましたが、違いはありません。これは何時間も頭を悩ませてきました。助けていただければ幸いです。

+ (void)populateDatabase
{
// Get URL -> "<Documents Directory>/<TrailerDB>" 
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

url = [url URLByAppendingPathComponent:@"TrailerDB"];

UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:url];

// If document exists on disk...

if (![[NSFileManager defaultManager] fileExistsAtPath:[url path]]) 
{
    [doc saveToURL:url 
  forSaveOperation:UIDocumentSaveForCreating
 completionHandler:^(BOOL success)
     { 

         if (success) [self fillDatabase:doc.managedObjectContext];

         if (!success) NSLog(@"couldn’t open document at %@", url);
     }];

} else {   

    if (doc.documentState == UIDocumentStateClosed) {
        // exists on disk, but we need to open it
        [doc openWithCompletionHandler:^(BOOL success) 
         {

             if (success) [self fillDatabase:doc.managedObjectContext];

             if (!success) NSLog(@"couldn’t open document at %@", url);
         }];
    } else if (doc.documentState == UIDocumentStateNormal) 
    {
        [self fillDatabase:doc.managedObjectContext];
    }
}
}
4

1 に答える 1

3

fillDatabase の後、次のメソッドを呼び出してみてください。

[doc saveToURL:doc.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success)
 {
    if (success == NO)
    {
       NSLog(@"Save operation failed!");
    }
 }];
于 2012-02-16T06:14:29.190 に答える