【问题标题】:Warning: Incompatible pointer types assigning to 'NSMutableArray *' from 'NSArray<NSString *> * _Nullable'警告:从 'NSArray<NSString *> * _Nullable' 分配给 'NSMutableArray *' 的指针类型不兼容
【发布时间】:2018-07-08 14:31:23
【问题描述】:

我正试图弄清楚如何绕过这个警告。我正在使用 docs 目录的内容填充 UITableView。代码执行得很好,但我需要清理这个警告。

@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 Semantic Issue 错误:

[tableData removeObjectAtIndex:indexPath.row];

[tableData insertObject:objectToMove atIndex:toIndexPath.row];

它告诉我: 'NSArray' 没有可见的@interface 声明选择器'removeObjectAtIndex:'

docPath jas 是一个字符串,而 tableData 必须是某种数组,所以我很困惑。 谢谢!!

【问题讨论】:

  • 不相关但为什么你有@synthesize 行?多年来一直不需要。

标签: ios uitableview nsarray


【解决方案1】:

contentsOfDirectoryAtPath 返回不可变的NSArray。你必须做一个mutableCopy

tableData = [[[NSFileManager defaultManager]  contentsOfDirectoryAtPath:docPath error:NULL] mutableCopy];

或者使用初始化器

NSArray *fileNames = [[NSFileManager defaultManager]  contentsOfDirectoryAtPath:docPath error:NULL];
tableData = [NSMutableArray arrayWithArray: fileNames];

【讨论】:

  • 谢谢!! mutableCopy 完美地修复了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多