【问题标题】:Concatenating of two arrays results in null连接两个数组会导致 null
【发布时间】:2014-01-16 20:26:26
【问题描述】:

我试图将两个目录列表连接到一个数组中,我让目录数组分别显示每个目录中的文件列表(NSLog),但通过 addObjectsFromArray 将它们连接在一起,结果为(null):

NSString *path1 = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/Dir1/"];
NSString *path2 = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/Dir2/"];

NSArray *directoryList1 = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path1 error:nil]
                                  pathsMatchingExtensions:[NSArray arrayWithObjects:@"log", nil]];

NSArray *directoryList2 = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path2 error:nil]
                                  pathsMatchingExtensions:[NSArray arrayWithObjects:@"log", nil]];

NSLog(@"directoryList1 contains: %@", directoryList1);
NSLog(@"directoryList2 contains: %@", directoryList2);

NSMutableArray *directoryList;
[directoryList addObjectsFromArray:directoryList1];
[directoryList addObjectsFromArray:directoryList2];

NSLog(@"directoryList contains: %@", directoryList);

【问题讨论】:

  • 你永远不会创建directoryList

标签: objective-c nsmutablearray nsarray nsfilemanager


【解决方案1】:

这个:

NSMutableArray *directoryList;

定义一个指向数组的指针,但不创建实例。你应该有:

NSMutableArray *directoryList = [NSMutableArray array];

所以你可以添加内容。

【讨论】:

  • Jep 就是这样,再次感谢@Wain! SO会让我在7分钟内接受,请耐心等待。我想知道为什么 Clang 没有对此显示任何警告,例如无法修改未实例化的对象或其他...
  • 这不是编译问题,不确定运行静态分析是否会引发任何问题。从技术上讲,没有理由在使用时不能将其标记为未初始化。
  • 感谢@Wain,它确实应该包含在静态分析中,但是我在 XCode 4 上,但我怀疑这在 v5 中会有很大的不同。此外,我正在考虑将问题标题重命名为更合适的答案,例如“连接两个数组导致 null”...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多