2011-07-30 11 views
0

私はcoredataの初心者です。私はxmlの結果でシンプルデータベースを構築しています。CoreData - フェッチでオブジェクトが見つかりません

レコードが存在するかどうかを確認していない場合は、新しいレコードを追加して保存しますが、再度レコードを検索する代わりに、保存しています。

このクラスメソッドは2回呼び出され(xmlから2レコード)、メールクラスに保存されます。 ActivityIDはNSNumberです。

私は間違っていますか?

コード:

+(CompanyActivity *)createActivityWithInfoFromServer:(NSDictionary *)activityDictFromArray inManagedObjectContext:(NSManagedObjectContext *)context { 

    CompanyActivity *companyActivity = nil; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    request.entity = [NSEntityDescription entityForName:@"CompanyActivity" inManagedObjectContext:context]; 
    request.predicate = [NSPredicate predicateWithFormat:@"ActivityID == %@", [activityDictFromArray objectForKey:@"ActivityID"]]; 

    NSError *error = nil; 
    companyActivity = [[context executeFetchRequest:request error:&error] lastObject]; 

    NSLog(@"activity: %@", companyActivity); 

    if (!error && !companyActivity) { 
      companyActivity = [NSEntityDescription insertNewObjectForEntityForName:@"CompanyActivity" inManagedObjectContext:context]; 
      companyActivity.ActivityID = [NSNumber numberWithInt:[[activityDictFromArray objectForKey:@"ActivityID"] integerValue]]; 
      companyActivity.ActivityDescription_PT = [activityDictFromArray objectForKey:@"ActivityDescription_PT"]; 
      companyActivity.ActivityDescription_EN = [activityDictFromArray objectForKey:@"ActivityDescription_EN"]; 
      companyActivity.DateChangedStamp = [NSDate date]; 
    } 
    else 
      NSLog(@"no Activity created. Errors: %@", error); 

    return companyActivity; 
} 

答えて

2

問題はNSNumberにありました。レコードをデータベースに保存したが、見つけられなかった。私は今のところ、タイプオペレーションデータをNSStringに変更しました。

おかげで、

RL

1

まず物事は最初、あなたがrequestをリークしています。次に、問題を見つけるためにいくつかの基本的なデバッグを行う必要があります。いくつかのブレークポイントを設定し、フェッチを検査して、フェッチに挿入するアクティビティIDが有効な値であることを確認します。後で作成したオブジェクトも正しい値で正しく記入してください。すべてがどのようになっているかを見て、問題が解決していない場合は、進捗状況とともに質問に情報を追加してください。

+0

こんにちは、ポール。私はiOS 5でARCを使用しています。ActivityIDには値があります。私はそれが文脈に関連しているかもしれないと思うが、私は海岸ではない。私はNSEの数を持っていて、このメソッドを必要なだけ何度も呼び出した後、[コンテキスト・セーブ]を呼び出します。私は問題がここにあると思う...しかし、上記のコードでは、すべて正しいですか? –

+0

上記のコードは正しいと思われます(エラーオブジェクトは常にnilです)、どのデータが操作されているかによって大きく異なります。メモリオブジェクトに不正なデータがあると、コンテキストを保存するときにエラーが発生する可能性があります。 –

+0

こんにちは、エラーはありません。私はNSLogを持っていますが、私にはエラーはありません...私はGoogleTalkでiChatで話すことができますか?私はここに結果を投稿しますか? iChat:[email protected] googleTalk:[email protected] –

0

作成したオブジェクトを実際に保存しているとは限りません。オブジェクト作成ブロックに次のコードを追加してみてください。

[context save:&error]; 
if(error) { 
    NSLog(@"error saving entities: %@", error); 
} 
関連する問題