如何将NSString * C样式数组声明为全局变量

时间:2013-05-31 14:13:24

标签: ios objective-c

在我的主要iOS项目中,我有以下情况:
在file1.m我有:

NSString* s[] = {@"1", @"2", @"3", @"4"};

在file2.m中我有:

extern NSString** s;

在同一个file2.m中,下面的方法失败,“无法识别的选择器'长度'被发送到实例':

- (void) someMethod {
    int len = [s[0] length];
}

如果我创建一个新的演示项目并复制上面的代码,一切都按预期工作 我的主要项目可能有什么问题?我被困在这里2天试图找到问题 当我尝试访问数组中的元素时,int数组出现了同样的问题,区别在于我收到了错误的访问异常,尽管XCode调试器显示数组内容很好。

3 个答案:

答案 0 :(得分:1)

请验证使用extern声明的全局数组名称是否与length调用中引用的数组的名称相匹配(即s中的extern NSString** s;[s[0] length]是相同的名称),并且在s的调用范围内没有其他名为length的变量会“影响”全局。由于代码在较小的项目中工作正常,因此最有可能命名冲突。

答案 1 :(得分:0)

extern NSString** s;

你只是声明一个指向NSString对象指针的指针,正确的声明应该是:

extern NSString *s[];

答案 2 :(得分:0)

我有一些想法可能会发生在那里。

  1. 你正在某处覆盖数组。使用const

  2. 声明常量C数组总是有帮助的
  3. 变量名称冲突
    您有两个具有相同名称但不同对象的全局变量。运用 名称为s的全局变量可以轻松导致冲突。确保 使用全局变量的前缀,完全与你一样 为课程,词汇等做的事。