0

基本的に、Core Data クエリの結果で UILabel を更新したいと考えています。次のテキスト「ルートには X クレジットがあります」という UILabel があります。Core Data でエンティティ "Account" を検索し、検索を絞り込んで "root" アカウントだけを探し、さらに検索を絞り込んで "root" アカウントにある属性 "credit" だけを探します。最後に、UILabel を更新して、「ルートには 0 クレジットがあります」(または Core Data クエリが説明する多くのクレジット) を読み取るようにします。

これまでのところ、次のコードがあります。

- (void)rootCreditAmount {
// Core Data - root credit amount
NSFetchRequest *request = [[NSFetchRequest alloc] init];

// define our table / entity to use
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:_managedObjectContext];
[request setEntity:entity];

// filter results to just root user
NSPredicate *username = [NSPredicate predicateWithFormat:@"root"];

[request setPredicate:username];

// fetch records and handle error
NSError *error;
NSMutableArray *mutableFetchResults = [[_managedObjectContext executeFetchRequest:request error:& error] mutableCopy];

if (!mutableFetchResults) {
    // handle error.
    // should advise user to restart
}
NSLog(@"mutablefetchresults = %@",mutableFetchResults);
}

言うまでもなく、このコードが原因で現在アプリがクラッシュしています。

4

2 に答える 2

2

述語ステートメントを次のように変更します。

[NSPredicate predicateWithFormat:@"username == root"];

「ユーザー名」をフィールド名に変更します。述語文字列の書式設定の詳細については、こちらを参照してください。

于 2012-07-09T02:56:35.467 に答える
0

chat.stackoverflow.com の @skytz の助けのおかげで、必要なことを行うことができました。結局、NSPredicate を使用しなくなりました。以下の方法は、私の問題を解決しました。しかし、ナイスガイであるという精神で、私は@melsamの句読点に功績を認めます.

- (void)rootCreditAmount {
// Core Data - root credit amount
NSFetchRequest *request = [[NSFetchRequest alloc] init];

// define our table / entity to use
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:_managedObjectContext];
[request setEntity:entity];

// fetch records and handle error
NSError *error;
NSMutableArray *mutableFetchResults = [[_managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

if (!mutableFetchResults) {
    // handle error.
    // should advise user to restart
}

// refine to just root account
for (Account *anAccount in mutableFetchResults) {
    if ([anAccount.username isEqualToString:@"root"]) {

        NSLog(@"root credit = %@",anAccount.credit);

        _lblRootCredit.text = [NSString stringWithFormat:@"root has %@ credits.",anAccount.credit];
    }
}
}
于 2012-07-09T03:35:28.987 に答える