0
NSArray* address = [NSArray arrayWithArray:[detailItem addressArray]];
NSLog(@"address = %@", address);
NSString* addressToString = @"";
int arrayCount = [address count];
for (int i = 0; i < arrayCount; i++) {
    addressToString = [addressToString stringByAppendingString:[address objectAtIndex:i]];
    if (i == arrayCount -1) {
        addressToString = [addressToString stringByAppendingString:@""];
    } else {
        addressToString = [addressToString stringByAppendingString:@", "];
    }       
}

addressは、アドレスを保持するNSArrayです。

2010-06-23 09:05:19.346 iPhoneExample[1093:207] address = (
        {
        City = "Cupertino";
        Country = "United States";
        CountryCode = us;
        State = CA;
        Street = "1 Infinite Loop";
        ZIP = 95014;
    }
)

配列を調べてCSV文字列を作成しようとしているので、次のようになります。

Cupertino, "United States", us, CA, "1 Infinite Loop", 95014

しかし、私はクラッシュし続けます

addressToString = [addressToString stringByAppendingString:@", "];

私が受け取るメッセージは

***-[NSCFDictionary stringByAppendingString:]:認識されないセレクターがインスタンス0x1c2f10に送信されました

更新:detailItemはタイプABContact(カスタムクラス)のオブジェクトです。

ABContactにはaddressArrayというプロパティがあります

@property(非アトミック、読み取り専用)NSArray * addressArray;

私のaddressArrayの定義は

-(NSArray *)addressArray {return [self arrayForProperty:kABPersonAddressProperty];}
4

3 に答える 3

3

「アドレス」はNSDictionaryのNSArrayであり、NSArrayのNSArrayではありません。

辞書の値を配列として取得するには、次を使用できます。

[theDictionary allValues]

ただし、注文の保証はありません。そして、私はあなたが実際に必要としているのは:

NSMutableString* addressToString = [NSMutableString string];  // use mutable string!
for (NSDictionary* item in address) {     // use fast enumeration!
  [addressToString appendFormat:@"%@, \"%@\", %@, %@, \"%@\", %@\n",
   [item objectForKey:@"City"], 
   /* etc ... */
  ];
}
于 2010-06-23T14:06:37.860 に答える
1

これ:

2010-06-23 09:05:19.346 iPhoneExample[1093:207] address = (
    {
    City = "Cupertino";
    Country = "United States";
    CountryCode = us;
    State = CA;
    Street = "1 Infinite Loop";
    ZIP = 95014;
}
)

NSDictionaryです。あなたはそのメンバーにアクセスしたいと思うでしょう[dictionary objectForKey:'City']

したがって、更新されたコードは次のようになります。

NSDictionary* address = [detailItem addressArray];
NSLog(@"address = %@", address);
NSString* addressToString = @"";
int counter = 0;
for (id object in myDictionary) {
  if (counter != 0)
    addressToString = [addressToString stringByAppendingString:@","];
  addressToString = [addressToString stringByAppendingString:object];   
  counter++;
}
于 2010-06-23T14:08:01.303 に答える
0

ディクショナリではなく実際に配列を返すようにメソッドを変更できる場合はaddressArray、次のようにすることができます。

NSString * addressString = [[detailItem addressArray] componentsJoinedByString:@","];

以上です...

于 2010-06-23T14:31:37.423 に答える