在我的应用程序中,我设置了一个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]]];