2016-04-26 122 views
0

我是新来的目标C.我正在编写编码竞争的代码。为此,我在我的XCode IDE中编写代码,并将代码上传到他们的网站上。在我的机器上运行的代码会在网站上给编译器带来错误。Objective C编译器错误

例如, 在XCode中为我工作的数组元素的简单赋值。

NSArray *itemArray; 
NSString *feet; 
feet = itemArray[0]; 

上面一行“分配时键入‘结构的NSString *’从类型‘结构NSArray的’不兼容类型”

我必须使用以下语法,使其工作产生误差。

feet = [itemArray objectAtIndex:0]; 

相似,for循环。

for (int i = 0; i <= count - 1; i++) { 
<#statements#> 
} 

这给出了错误“for循环初始声明只允许在C99或C11模式”。我需要进行以下更改才能使其正常工作。

int i; 
for (i = 0; i <= count - 1; i++) { 
<#statements#> 
} 

任何人都可以请指教如何配置我的XCode IDE,以便我可以在网站上编写与编译器兼容的代码?

显然,该网站上的目标C的支持的版本是4.4.5 GCC我想知道我是否能在XCode中

+0

请检查:http://stackoverflow.com/questions/24881/how-do-i-fix-for-loop-initial-declaration-used-outside-c99-mode-gcc-error –

+0

贵Objective-C文件以.m结尾 – gnasher729

+0

文件扩展名为.m –

回答

0

配置它关于你的第为例,你只是声明你的变量,但你需要为你的数组创建一个实例并用一些元素填充它。

NSArray *itemArray = @[@"item1-String", @"item2-String"]; 
NSString *feet = itemArray[0]; 

否则试图让数组的第一个元素(itemArray[0][itemArray objectAtIndex:0]将导致一个问题,因为该数组没有实例化。

需要注意的是,如果你的阵列是由动态意味着TOT(添加/删除元素后),使用NSMutableArray

NSMutableArray *itemArray = [@[@"item1-String", @"item2-String"] mutablecopy]; 

如果你不知道有多少项目包含您的阵列,试图让元素之前,检查其count

NSString *feet; 
if (itemArray.count <= 3) { //Is there at least 3 elements? 
    feet = itemArray[2]; //then get third element 
} 
+0

我遗漏了很多来自我的文章的代码,因为我只是想强调这个问题。我只想知道为什么itemArray [0]给出编译器错误。 –

+0

那么数组中第一项的类型是什么? – Niko

+0

我的数组包含字符串。它被初始化为 NSArray * itemArray = @ [@“A”,@“B”,@“C”,@“D”]; –