为什么这段代码没有将NSArray对象放入NSMutableArray中?

时间:2014-10-09 14:44:44

标签: objective-c ios7 nsmutablearray nsarray

我有一个包含7个TAB分隔字符串的.txt文件。我想取7个字符串,一次一个,并将每个字符串分隔符分隔成一个数组,然后将该数组放入一个Mutable数组中,从那里我可以处理每个7个处理过的字符串。这是我的代码:

NSMutableArray *arrayOfSplitStrings = [NSMutableArray arrayWithCapacity:0];

for(int i = 1; i <= inputStrings.count - 1; i++)  {        
    NSArray *oneSplitString = [[NSArray alloc]init];
    arrayOfSplitStrings = [[NSMutableArray alloc]init];

    oneSplitString = [inputStrings[i] componentsSeparatedByString:@"\t"];
    [arrayOfSplitStrings addObjectsFromArray: oneSplitString];
}

问题是,完成后, arrayOfSplitStrings 只有一(1)个数组,它是@&#34;&#34;!我已经看了SO并尝试了我能想到的一切,但它仍然无法正常工作。我做错了什么?

2 个答案:

答案 0 :(得分:3)

这一行导致输出数组被重新创建,循环的每次迭代,因此它只保留文件的最后一行:

arrayOfSplitStrings = [[NSMutableArray alloc]init];

尝试:

NSMutableArray *arrayOfSplitStrings = [NSMutableArray new];
for (NSUInteger i = 1; i < [inputStrings count]; i++) {
    NSArray *oneSplitString = [[inputStrings[i] componentsSeparatedByString:@"\t"] copy];
    [arrayOfSplitStrings addObject:oneSplitString];
}

(注意for循环条件也会改变。)

答案 1 :(得分:0)

循环外的arrayOfSplitStrings被循环内部创建的NSArray隐藏,将其删除。

无需创建NSArray arrayOfSplitStrings,因为在下一行返回一个新数组时,只需要声明。

for循环可以更改为for-in循环,从而消除索引变量i

还有其他一些可能的优化。

NSArray *bodyStrings = [inputStrings subarrayWithRange:NSMakeRange(1, inputStrings.count-1)];
NSMutableArray *arrayOfSplitStrings = [NSMutableArray new];
for (NSString *aString in bodyStrings) {
    NSArray *oneSplitString = [aString componentsSeparatedByString:@"\t"];
    [arrayOfSplitStrings addObject:oneSplitString];
}

输入:

NSArray *inputStrings = @[@"qw\ter", @"as\tdf", @"zx\tcv"];

产生

arrayOfSplitStrings: (
        (
        as,
        df
    ),
        (
        zx,
        cv
    )
)