2013-02-16 147 views
1

对于我的作业,我必须将.h和.m写入命令行应用程序,主要由我的老师给出。它是一个简单的Chutes and Ladders风格板,打印出100个空间。在初始化后更改NSArray的值

梯形图和滑槽将由单个维度数组中的“L10”和“C10”表示,该单维数组存储板的表示形式。给定main的第一部分是initBoard,我想我将创建一个空字符串数组。 Ladder和Chutes的数量在随后提供的代码的两行中给出,我想随机通过他们的方法填充它们。

如果我在“initBoard”(第一件事主要调用)使用for循环方法来建立一个NSArray中的尺寸为100,空刺填充它,我就能改变在我的“makeLadders”和“makeChutes”方法中将空字符串转换为“L10”和“C10”字符串,还是必须使用NSMutableArray来实现类似的功能?

我读过NSArray是不可变的,这意味着它不能在init之后修改,所以如果希望修改数组的内容,就必须使用NSMutableArray。我的老师特别提到NSArrays应该保存董事会的数据,所以我很困惑。

回答

1

你有两个选择:

  1. 含NSString对象一个可变的数组;
  2. 一个包含NSMutableString对象的不可变数组。

实施例与第一选择:

NSMutableArray* array=[[NSMutableArray alloc] initWithCapacity: 100]; 
for(NSUInteger i=0; i<100; i++) 
{ 
    [array addObject: @""]; 
} 

要更改这些值使用:

[array replaceObjectAtIndex: i withObject: @"New String"]; 
+0

哦,包含在不可变的阵列内的对象可以被改变! IDK为什么没有穿过我的脑海。 – ChrisWilson4 2013-02-16 12:07:02

+2

除了' - [NSMutableArray insertObject:atIndex:]'不会更改数组中的现有条目,它将插入一个新的条目。试试[' - [NSMutableArray replaceObjectAtIndex:withObject:]'](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#//apple_ref/ occ/instm/NSMutableArray/replaceObjectAtIndex:withObject :)代替。假设你的目标是iOS 5或10.6或更高版本,你也可以使用'array [i] = newObject;'语法。 – 2013-02-16 16:04:46

+1

就像Java一样,耶! – ChrisWilson4 2013-03-01 14:22:43