我正在尝试使用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,我认为这是我的问题。
答案 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