数组计数返回一个,尽管它包含多个值

时间:2011-12-26 03:38:38

标签: objective-c uitableview

我正在尝试使用plist文件填充我的tableview。

plist文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
    <key>Rows</key>
    <array>
        <string>A</string>
        <string>B</string>
        <string>C</string>
        <string>D</string>
    </array>
</dict>
</array>
</plist>

我用:

填充我的数组
NSString *path = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"plist"];
NSArray *array = [[NSArray alloc] initWithContentsOfFile:path];
self.namesArray = [array valueForKey:@"Rows"];

当我记录plist的内容时,我得到:

(
    (
    A,
    B,
    C,
    D
)
)

但是,我的部分行数似乎从该数组返回1。

我还记录了数组计数,它只返回1,我认为这是我的问题。

1 个答案:

答案 0 :(得分:6)

这是因为数组中的一个元素 - 另一个数组。

您要做的是在数组中的第一个元素上调用-count

NSUInteger count = [[array objectAtIndex:0] count];

将来,当您拥有具有相似结构的阵列时,您可能需要事先考虑展平它们。我在NSArray上写了一个类别(未经测试):

@interface NSArray (JRAdditions)

- (NSArray *) flattenedArray;

@end

@implementation NSArray (JRAdditions)

- (NSArray *) flattenedArray {
  if([self count] == 0) return nil;

  NSMutableArray *flattened = [NSMutableArray arrayWithCapacity:[self count]];
  for(id object in [self copy]) {
     @autoreleasepool {
        if([object isKindOfClass:[NSArray class]]) {
            [flattened addObjectsFromArray:[object flattenedArray]]; //recursive call
        } else {
            [flattened addObject:object];
        }
     }
  }

  return [NSArray arrayWithArray:flattened];
}

@end