Objective c BOOL的NSFormatter

Objective c BOOL的NSFormatter,objective-c,xcode,cocoa,Objective C,Xcode,Cocoa,我已经用绑定到阵列控制器的表设置了我的简单Xcode项目。如果阵列控制器中充满了具有字符串属性的实体,则可以正常工作。但是,我希望将属性更改为BOOL,并让表根据BOOL显示字符串“true”或“false” 我已从NSFormatter重写了以下两个方法: -(NSString*) stringForObjectValue:(id)object { //what is the object? NSLog(@"object is: %@", object); if(![object

我已经用绑定到阵列控制器的表设置了我的简单Xcode项目。如果阵列控制器中充满了具有字符串属性的实体,则可以正常工作。但是,我希望将属性更改为BOOL,并让表根据BOOL显示字符串“true”或“false”

我已从NSFormatter重写了以下两个方法:

-(NSString*) stringForObjectValue:(id)object {
  //what is the object?
  NSLog(@"object is: %@", object);
  if(![object isKindOfClass: [ NSString class ] ] ) {
    return nil;
  }

  //i'm tired....just output hello in the table!!
  NSString *returnStr = [[NSString alloc] initWithFormat:@"hello"];
  return returnStr;
}

-(BOOL)getObjectValue: (id*)object forString:string errorDescription:(NSString**)error {
  if( object ) {
    return YES;
  }
  return NO;
}
因此,如果属性是字符串,则该表将填充“hello”,但是如果我将其切换为布尔值,则该表将填充大量空格


我不知道这是否有帮助,但在我输出对象的那一行,如果属性是字符串,它会输出u NSCFString,如果我将属性切换为布尔值,它会输出“Text Cell”。这是另一件我不明白的事情。

好吧,还不是100%清楚你想从代码中做什么,但首先-BOOL不是一个对象,它基本上是0或1,所以要将BOOL值放入数组中,最好使用
NSNumber

NSNumber *boolValue = [NSNumber numberWithBool:YES];
并将其放入阵列中。现在您要更改您的方法:

-(NSString*) stringForObjectValue:(id)object {
   NSNumber *number = (NSNumber *)object;
   if ([number boolValue] == YES) 
       return @"true";
   else
       return @"false";
}

这里有几件事-例如,如果可以的话,您希望避免传递
id
引用(如果您知道
NSArray
中的所有对象都是
NSNumber
,您不需要这样做)。

我有一个NSManagedObjectModel,它有一个实体和一个属性。编辑.xcdatamodeld文件时,我将属性设置为boolean,并将其初始化为FALSE。我假设布尔类型映射到布尔类型。也许这一点我错了。我尝试了您建议的解决方案,它返回[number boolValue],但表仍然为空。也许我需要重写另一种方法。