Ios 警告:分配给';NSMutableArray*';从';NSArray<;NSString*>;*_可为空';
我正在想办法避开这个警告。我正在用docs目录的内容填充UITableView。代码执行良好,但我需要清除此警告Ios 警告:分配给';NSMutableArray*';从';NSArray<;NSString*>;*_可为空';,ios,uitableview,nsarray,Ios,Uitableview,Nsarray,我正在想办法避开这个警告。我正在用docs目录的内容填充UITableView。代码执行良好,但我需要清除此警告 @implementation ViewSavedFiles { NSMutableArray *tableData; } @synthesize myFileName; - (void)viewDidLoad { [super viewDidLoad]; NSString *docPath = [NSSearchPathForDirectoriesInDomains(
@implementation ViewSavedFiles
{
NSMutableArray *tableData;
}
@synthesize myFileName;
- (void)viewDidLoad {
[super viewDidLoad];
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
tableData = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:docPath error:NULL];
}
它警告我:不兼容的指针类型从“NSArray*_Nullable”分配给“NSMutableArray*”
如果我将NSMutableArray更改为NSArray,我将在以下内容中获得ARC语义问题错误:
[tableData removeObjectAtIndex:indexPath.row];
及
它告诉我:
“NSArray”没有可见的@interface声明选择器“removeObjectAtIndex:”
docPath jas必须是字符串,而tableData必须是某种数组,所以我很困惑。
谢谢
contentsOfDirectoryAtPath
返回不可变的NSArray
。您必须制作一个mutableCopy
tableData = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:docPath error:NULL] mutableCopy];
或者使用初始值设定项
NSArray *fileNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:docPath error:NULL];
tableData = [NSMutableArray arrayWithArray: fileNames];
不相关,但为什么有
@synthesis
行?这已经很多年不需要了。谢谢!!mutableCopy完美地修复了它。
NSArray *fileNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:docPath error:NULL];
tableData = [NSMutableArray arrayWithArray: fileNames];