1

配列コントローラーにバインドされたテーブルを使用して、単純な Xcode プロジェクトをセットアップしました。アレイ コントローラが文字列属性を持つエンティティでいっぱいの場合、正常に動作します。ただし、属性をBOOLに変更し、BOOLに基づいて文字列「true」または「false」をテーブルに表示したいと考えています。

NSFormatter の次の 2 つのメソッドをオーバーライドしました。

-(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 を出力し、属性をブール値に切り替えると「テキストセル」を出力します。これは私が理解していない別のものです。

4

1 に答える 1

2

OK、コードから何をしようとしているのかは 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 に答える