NSArray与NSMutableArray问题

时间:2014-01-13 17:05:06

标签: ios nsmutablearray nsarray

在我的应用中,我设置了NSArray并将文档目录中包含HTML扩展名的所有对象添加到其中。
然后我使用这个数组来填充UITableView但是......我经常收到警告

  

'NSArray'可能无法响应'removeObjectAtIndex:'

如果我将其更改为NSMutableArray,则该警告会消失,但会在此处显示新警告:

self.files = [[[manager contentsOfDirectoryAtPath:documentsDirectoryPath
                                            error:nil]
                          pathsMatchingExtensions:[NSArray arrayWithObjects:@"html", nil]] retain];

警告是:

  

从'NSArray *'

分配给'NSMutableArray *'的指针类型不兼容

该应用程序运行正常,因为编辑表格视图从不会产生任何问题,尽管removeObjectAtIndex:问题。

2 个答案:

答案 0 :(得分:1)

使用mutableCopy而不是retain

self.files = [[[manager contentsOfDirectoryAtPath:documentsDirectoryPath error:nil]
               pathsMatchingExtensions:[NSArray arrayWithObjects:@"html", nil]]
               mutableCopy];

答案 1 :(得分:1)

pathsMatchingExtensions返回一个普通的NSArray对象。

当我需要一个可变数组但得到一个不可变数组时,我会经常使用[NSMutableArray arrayWithArray:anArray]

在您的情况下,您可以将代码行更改为:

self.files = [NSMutableArray arrayWithArray:[[manager contentsOfDirectoryAtPath:documentsDirectoryPath error:nil]
                                                        pathsMatchingExtensions:[NSArray arrayWithObjects:@"html", nil]]];