2013-11-26 15 views
5

MagicalRecordの非常に基本的な実装で私の手を試しています。MagicalRecordはデータを保存しません

エントリを保存した後、そのタイプのエントリをフェッチすると、今保存したエントリが表示されます。ただし、エントリを保存してからアプリケーションを終了し、再度起動してからフェッチすると、空の状態になります。保存する

コード:フェッチのための

- (void)createTestTask{ 
    NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread]; 

    Task *task = [Task createInContext:localContext]; 
    task.tName = @"First Task"; 
    task.tDescription = @"First Task created with MagicalRecord. Huzzah!"; 


    NSError *error; 
    [localContext save:&error]; 
    if (error != Nil) { 
     NSLog(@"%@", error.description); 
    } 
} 

コード:私はここで何かをしないのです確信してではなく、

- (void) fetchTasks{ 
    NSArray *tasks = [Task findAll]; 
    NSLog(@"Found %d tasks", [tasks count]); 
} 

を(私は何が実際に保存されている場合は、ここで知りたいすべて)何か私はstackoverflowまたは私が見たチュートリアルで見つけることができます。

助けを歓迎します。

答えて

8

を助けるかもしれない私のコードがある私は明白なことを聞​​いている質問「それが差し込まれている」:あなたは+[MagicalRecord setupCoreDataStack]のいずれかの方法でコアデータスタックを初期化しましたか?

スタックが正しく初期化されましたか?つまり、店舗とモデルは互換性がありますか?そうでない場合、MagicalRecord(より適切には、Core Data)がPersistent Storeなしでスタック全体をセットアップします。これは店がないので店に保存することができなくなるまですべてがうまくいくように見えるので、迷惑です。 MagicalRecordには+[MagicalRecord currentStack]メソッドがあり、これを使用してスタックの現在の状態を調べることができます。スタックをセットアップした後、デバッガでそれを試してみてください。

これを行うと仮定すると、もう1つはエラーログです。使用する場合

[localContext MR_saveToPersistentStoreAndWait]; 

エラーがコンソールに記録されます。一般に、後でアプリを実行したときにデータが表示されない場合は、保存と呼ばれると思ったときにデータが保存されなかったためです。また、データが正しく検証されなかったため、保存が実行されません。一般的な例は、必要なプロパティがあり、saveを呼び出すときにまだnilである場合です。 「通常の」コアデータはこれらの問題を一切ログに記録しないため、実際には保存操作が失敗したときに正常に動作したと考えられます。一方、MagicalRecordは、すべてのエラーをキャプチャし、少なくともあなたのデータで何が起こっているかをコンソールに記録します。

+1

saveToPersistentStoreAndWaitはトリックをしました。 currentStackは、それが少なくとも必要であるように動作していることを示しました。なぜセーブが正しく実行されなかったのか分かりませんが、saveToPersistentStoreAndWaitはそれを行いました。その上の任意のアイデア? – ophychius

3

私が魔法の記録で始まったとき、私もこの問題に直面していました。問題はあなたがデータを保存するために使用している文脈です。ここにあなたの

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 

       NSArray *userInfoArray = [UserBasicInfo findByAttribute:@"userId" withValue:[NSNumber numberWithInt:loggedInUserId] inContext:localContext]; 

       UserBasicInfo* userInfo; 

       if ([userInfoArray count]) { 
        userInfo = [userInfoArray objectAtIndex:0]; 
       } else { 
        userInfo = [UserBasicInfo createInContext:localContext]; 
       } 

       userInfo.activeUser = [NSNumber numberWithBool:YES]; 
       userInfo.firstName = self.graphUser[@"first_name"]; 
       userInfo.lastName = self.graphUser[@"last_name"]; 
       userInfo.userId = @([jsonObject[@"UserId"] intValue]); 
       userInfo.networkUserId = @([jsonObject[@"NetworkUserId"] longLongValue]); 
       userInfo.userPoint = @([jsonObject[@"PointsEarned"] floatValue]); 
       userInfo.imageUrl = jsonObject[@"Picturelist"][0][@"PictureUrL"]; 
       userInfo.imageUrlArray = [NSKeyedArchiver archivedDataWithRootObject:jsonObject[@"Picturelist"]]; 
      } completion:^(BOOL success, NSError *error) { 

      }]; 
0

使用すると、これはあなたに行わ

[[NSManagedObjectContext MR_defaultContext]saveToPersistentStoreAndWait]; 
+0

この質問は既に回答済みです...あなたが言いたいのは、元の回答の一部です.... – ophychius

関連する問題