NSArray objectAtIndex no está funcionando. Por favor ayuda
-
29-09-2019 - |
Pregunta
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:@", "];
}
}
dirección es un NSArray que mantiene una dirección
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;
}
)
Estoy tratando de ir a través de la matriz y crear una cadena CSV por lo que se vería así
Cupertino, "United States", us, CA, "1 Infinite Loop", 95014
Sin embargo, sigo rompiendo en
addressToString = [addressToString stringByAppendingString:@", "];
mensaje que recibo es
*** -[NSCFDictionary stringByAppendingString:]: unrecognized selector sent to instance 0x1c2f10
ACTUALIZADO: detailItem es un objeto de tipo ABContact (clase personalizada).
ABContact tiene una propiedad llamada addressArray
@property (nonatomic, readonly) NSArray *addressArray;
la definición de mi addressArray es
- (NSArray *) addressArray {return [self arrayForProperty:kABPersonAddressProperty];}
Solución
Su "dirección" es un NSArray de NSDictionary, no un NSArray de NSArray.
Para obtener los valores del diccionario como una matriz, puede utilizar
[theDictionary allValues]
pero no es no garantía del orden. Y creo que lo que realmente se necesita es:
NSMutableString* addressToString = [NSMutableString string]; // use mutable string!
for (NSDictionary* item in address) { // use fast enumeration!
[addressToString appendFormat:@"%@, \"%@\", %@, %@, \"%@\", %@\n",
[item objectForKey:@"City"],
/* etc ... */
];
}
Otros consejos
Este:
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 . Usted tendrá que acceder a sus miembros con [dictionary objectForKey:'City']
Por lo tanto, su código actualizado debe decir:
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++;
}
Si usted podría cambiar su método addressArray
para realmente devolver una matriz en lugar de un diccionario, entonces se podría hacer:
NSString * addressString = [[detailItem addressArray] componentsJoinedByString:@","];
Y eso es todo ...