NSArray Vs. NSMutableArray Issues



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

"

NSArray"可能不会响应"removeObjectAtIndex:"

如果我将其更改为NSMutableArray则警告会消失,但此处会弹出一个新警告:

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

该警告是:

从"NSArray *"分配给"NSMutableArray *"的不兼容指针类型

该应用程序运行良好,因为尽管存在removeObjectAtIndex:问题,但编辑表视图永远不会产生任何问题。

使用 mutableCopy 而不是 retain

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

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

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

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

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

最新更新