将NSString转换为NSMutableArray

时间:2011-03-23 12:36:39

标签: iphone objective-c cocoa-touch nsstring nsmutablearray

我正在尝试将NSString转换(或复制?)为NSMutableArray。我想我的问题是我并不真正了解MutableArray的结构。在我有限的知识中,数组看起来像这样:

NoteBook = [[NSMutableArray alloc] init];

for (int temp = 0; temp < 3; temp++) {
    [NoteBook insertObject:@"Page" atIndex:temp];
}

哪个会给我一个 PagePagePage 数组。我们假设我想打开一个包含PagePagePage的txt文件,但是这些单词被一个已定义的字符串分开,这样我就可以将我的数组中的各个对象分开,如下所示:页面---页面末尾 - -Page ---页面末尾---页面

现在,我的下一步是从txt文件中读取此信息:

NSString *tempTextOut = [NSString stringWithContentsOfFile:filePath
                                                 encoding:NSUTF8StringEncoding
                                                    error:&error];
NoteBook = [tempTextOut componentsSeparatedByString: @"\n--- end of page ---\n"];

然而,最后一行不起作用,我告诉xCode:不兼容的Objective-C类型分配'struct NSArray *',期望'struct NSMutableArray *'。我真的不明白这一点 - NSArray和MutableArray应该是兼容的(因为一个是另一个的子类)。不应该xCode告诉我问题是我一直在尝试将NSString转换为NSMutableArray吗?

我可能需要重新设置我的MutableArray,然后再将其放回去,因为现在它仍然包含我在第一步中分配给它的 PagePagePage 。我以为我的NoteBook可变数组只会被字符串替换,但我想情况并非如此。

我非常感谢这件事的任何帮助。谢谢!

2 个答案:

答案 0 :(得分:5)

componentsSeparatedByString:返回一个普通的不可变NSArray,而不是NSMutableArray。您可以将数组传递给[NSMutableArray arrayWithArray:]或使用数组上的mutableCopy从中获取可变数组,或者可以在现有NSMutableArray上使用addObjectsFromArray:向其添加对象。

如果您使用mutableCopy路线,请务必记住您有责任在其上拨打releaseautorelease

答案 1 :(得分:4)

如果要操作不可变实例,将可变对象分配给同一个不可变类型将导致运行时错误。

您可以致电:

获取可变副本
NoteBook = [[tempTextOut componentsSeparatedByString: @"\n--- end of page ---\n"] mutableCopy];

如果NoteBook是保留属性,您应该这样指定:

self.NoteBook = [[[tempTextOut componentsSeparatedByString: @"\n--- end of page ---\n"] mutableCopy] autorelease];

所以可变副本不会被保留。您可以正常使用dealloc方法释放。