NSArray objectAtIndex не работает. Пожалуйста помоги - PullRequest
0 голосов
/ 23 июня 2010
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:]: unrecognized selector sent to instance 0x1c2f10

ОБНОВЛЕНИЕ: detailItem - это объект типа ABContact (пользовательский класс).

ABContact имеет свойство addressArray

@property (nonatomic, readonly) NSArray *addressArray;

определение моего addressArray:

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

Ответы [ 3 ]

3 голосов
/ 23 июня 2010

Ваш "адрес" является NSArray NSDictionary, а не 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 ... */
  ];
}
1 голос
/ 23 июня 2010

Это:

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']

Итак, ваш обновленный код должен выглядеть так:

0 голосов
/ 23 июня 2010

Если бы вы могли изменить свой addressArray метод, чтобы он фактически возвращал массив вместо словаря, то вы могли бы сделать:

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

И это все ...

...