1

我已经使用绑定到数组控制器的表设置了我的简单 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”。这是我不明白的另一件事。

4

1 回答 1

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引用(如果您知道NSArrayare中的所有对象,则NSNumber不需要这样做)。

于 2012-07-21T00:42:05.030 回答