0

データベースに「Me」というエンティティがあり、「loggedIn」という BOOL 属性があります。次のように、属性のデフォルト値を NO に設定します。

ここに画像の説明を入力

NOに設定されていることを確認するために、プログラムでも設定しましたが、ログにはYESと表示されます。

NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Me"];

NSError *err;
NSUInteger count = [context countForFetchRequest:request error:&err];

if (count == 0) {
    NSManagedObject *me = [NSEntityDescription insertNewObjectForEntityForName:@"Me" inManagedObjectContext:context];
}
NSArray *fetchedObjects = [context executeFetchRequest:request error:&err];

[[fetchedObjects objectAtIndex:0] setValue:[NSNumber numberWithBool:NO] forKey:@"loggedIn"];
NSString *amIYesOrNo = [NSString stringWithFormat:@"%@", ([[fetchedObjects objectAtIndex:0] valueForKey:@"loggedIn"] ? @"YES" : @"NO")];

NSLog(amIYesOrNo);

amIYesOrNo は、NO であるはずのときに常に YES を表示します。何が起こっている?

4

1 に答える 1

4

valueForKey:@"loggedIn" は有効なオブジェクトを返し、?: 演算子はそれが非 nil であるかどうかをチェックしており、常にそうです。内容を取得するには、boolValue メソッド呼び出しを NSNumber に適用する必要があります。

于 2012-04-27T15:36:15.780 に答える