0

CoreDataとNSPredicateで予期しない動作が発生しています。大きなデータベース集団では、私は、互いに関連する異なる管理オブジェクトを持っています。しかし、私は以下の問題があります。私は全体のコンテキストを最初に保存しない限り、ID(NSNumber、この関数にNSStringとして与えられる)を与えるとき、私は結果を得ません。私はそれをしたいとは思っていません。コードは次のとおりです。コアデータ内のIDの検索

- (DOSite *) findSite:(NSString *) siteId { 
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(id = %@)", siteId]; 

    [NSFetchedResultsController deleteCacheWithName:nil]; 
    [[self fetchedResultsController].fetchRequest setPredicate:predicate]; 

    NSError *fetchError; 

    if (![[self fetchedResultsController] performFetch:&fetchError]) { 
     // Handle the error. 
     // This is a serious error and should advise the user to restart the application 
     NSLog(@"Fetching data error: %@", [fetchError localizedDescription]); 
    } 

    if([[[self fetchedResultsController] fetchedObjects] count] == 0){ 
     return NULL; 
    } 
    return (DOSite *)[[[self fetchedResultsController] fetchedObjects] objectAtIndex:0]; 
} 

だから私はすべての項目で検索を行う(+[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]を使用して)アイテムのx数は項目の右の量を返す追加するとき。

文字列(たとえばpredicateWithFormat:@"(name LIKE %@)")を検索すると肯定的な結果が得られますが、上記のコードpredicateWithFormat:@"(id = %@)を使用すると結果はゼロになります。

結果が得られる唯一の方法は、コンテキスト全体を保存してfetchRequestを実行してから突然動作させることです。

私はIDを探して間違っている必要があります、私はちょうどそれを見つけて、この時点までにそれを絞り込むためにそれで二日間過ごすために見えないようです。これについて私に助言を与えることができる人はいますか?

答えて

0

問題は、上で概説した述語にNSStringを渡したことでした。それをint(つまりpredicateWithFormat:@"(id == %i)")に変更すると何らかの理由で正常に動作します。

0

これは機能しない可能性がありますが、あなたのエンティティ(「SiteID」など)で「id」より複雑な名前を使用しようとしましたか?時には、非常に短い名前が他のシステムプロパティと重複し、奇妙な問題を引き起こすことがあります。

+0

はい、これはObjective-Cで慣れていなければならないことです。この場合は問題ではありませんでしたが、私は運勢のリリースでそれを変更します。それを指摘してくれてありがとう! –

関連する問題