我正在做一个应用程序而且我无法获得一个可变数组来接受对象。我试过设置断点来看看发生了什么,但它一直说可变数组是零。有没有人有答案? 我的代码:
- (void)save:(id) sender {
// All the values about the product
NSString *product = self.productTextField.text;
NSString *partNumber = self.partNumberTextField.text;
NSString *price = self.priceTextField.text;
NSString *quantity = self.quantityTextField.text;
NSString *weigh = self.weighTextField.text;
NSString *file = [self filePath];
//Singleton class object
Object *newObject = [[Object alloc] init];
newObject.product = product;
newObject.partNumber = partNumber;
newObject.price = price;
newObject.quantity = quantity;
newObject.weigh = weigh;
//Array declaration
mutableArray = [[NSMutableArray alloc]initWithContentsOfFile: file];
[mutableArray addObject:newObject];
[mutableArray writeToFile:file atomically:YES];
}
答案 0 :(得分:3)
虽然initWithContentsOfFile:可以在NSMutableArray上调用,但它是从NSArray继承的。返回值是一个不可变的NSArray。如果要将对象添加到可变数组中,则必须执行以下操作:
mutableArray = [[[NSMutableArray alloc] initWithContentsOfFile: file] mutableCopy];
[mutableArray addObject:newObject];
[mutableArray writeToFile:file atomically:YES];
现在,addObject:call应该可以工作。
最好的问候。
答案 1 :(得分:1)
[NSMutableArray initWithContentsOfFile:]
returns nil by default if the file can't be opened or parsed。您确定要加载的文件是否存在并且格式正确吗?
答案 2 :(得分:0)
尝试检查
上的断点mutableArray = [[NSMutableArray alloc]initWithContentsOfFile: file];
线。将光标移到mutableArray
上,如果它显示__NSArrayI
,则表示它是一个不可变数组,即你无法更新它,如果它显示__NSArrayM
,则表示它是一个可变数组,你可以更新这个数组。
在你的情况下,你得到不可变的数组,这就是为什么你不能更新它。
所以你有两种方法从这个文件中获取可变数组 -
方式:1 强>
mutableArray = [[[NSMutableArray alloc] initWithContentsOfFile: file] mutableCopy];
方式:2 强>
NSArray *anyArray = [[NSArray alloc]initWithContentsOfFile: file];
mutableArray = [[NSMutableArray alloc]initWithArray:anyArray];
在这两种情况下mutableArray
都是一个可变数组。你可以更新它。