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

And*_*e C 1 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>
Run Code Online (Sandbox Code Playgroud)

我用以下方法填充我的数组:

NSString *path = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"plist"];
NSArray *array = [[NSArray alloc] initWithContentsOfFile:path];
self.namesArray = [array valueForKey:@"Rows"];
Run Code Online (Sandbox Code Playgroud)

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

(
    (
    A,
    B,
    C,
    D
)
)
Run Code Online (Sandbox Code Playgroud)

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

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

Jac*_*kin 6

这是因为存在阵列中的一个元件-另一个阵列.

你想要做的是调用-count数组中的第一个元素:

NSUInteger count = [[array objectAtIndex:0] count];
Run Code Online (Sandbox Code Playgroud)

将来,当您拥有具有相似结构的阵列时,您可能需要事先考虑展平它们.我写了一个关于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
Run Code Online (Sandbox Code Playgroud)