BOOL的NSFormatter

时间:2012-07-21 00:33:05

标签: objective-c xcode cocoa

我已经设置了一个简单的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”,但如果我将其切换为布尔值,则表格中会填充大量空格。

我不知道这是否有帮助,但是在我输出对象的行上,如果属性是字符串,则输出__NSCFString;如果我将属性切换为布尔值,则输出“Text Cell”。这是我不明白的其他事情。

1 个答案:

答案 0 :(得分:2)

好的,它不是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,你就不应该这样做不需要)。