NSArray objectAtIndex 不起作用。请帮忙

发布于 2024-09-07 10:14:15 字数 1484 浏览 2 评论 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:@", "];
    }       
}

地址是一个 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];}
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 is an NSArray that holds an address

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;
    }
)

I'm trying to go thru the array and create a CSV string so it would look like

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

However, I keep crashing on

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

Message I get is

 *** -[NSCFDictionary stringByAppendingString:]: unrecognized selector sent to instance 0x1c2f10

UPDATED:
detailItem is an object of type ABContact (custom class).

ABContact has a property called addressArray

@property (nonatomic, readonly) NSArray *addressArray;

the definition of my addressArray is

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

手心的海 2024-09-14 10:14:15

你的“地址”是 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 ... */
  ];
}

Your "address" is an NSArray of NSDictionary, not an NSArray of NSArray.

To get the values of the dictionary as an array, you can use

[theDictionary allValues]

but there is no guarantee on the order. And I think what you actually need is:

NSMutableString* addressToString = [NSMutableString string];  // use mutable string!
for (NSDictionary* item in address) {     // use fast enumeration!
  [addressToString appendFormat:@"%@, \"%@\", %@, %@, \"%@\", %@\n",
   [item objectForKey:@"City"], 
   /* etc ... */
  ];
}
愚人国度 2024-09-14 10:14:15

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< /a>.您将需要使用 [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++;
}

This:

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;
}
)

Is a NSDictionary. You will want to access its members with [dictionary objectForKey:'City']

So, your updated code should read:

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++;
}
木森分化 2024-09-14 10:14:15

如果您可以更改您的 addressArray 方法以实际返回一个数组而不是字典,那么您可以这样做:

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

就是这样......

If you could change your addressArray method to actually return an array instead of a dictionary, then you could do:

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

And that's it...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文