Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 无法将对象添加到返回nil的可变数组中_Iphone_Objective C_Xcode_Nsmutablearray - Fatal编程技术网

Iphone 无法将对象添加到返回nil的可变数组中

Iphone 无法将对象添加到返回nil的可变数组中,iphone,objective-c,xcode,nsmutablearray,Iphone,Objective C,Xcode,Nsmutablearray,我正在做一个应用程序,但我无法获得一个可变数组来接受对象。我尝试设置断点来查看发生了什么,但它一直说可变数组为nil。有人有答案吗? 我的代码: [NSMutableArray initWithContentsOfFile:]。您确定要加载的文件存在并且格式正确吗?[NSMutableArray initWithContentsOfFile:]。确实要加载的文件存在并且格式正确吗?如果可以在NSMutableArray上调用initWithContentsOfFile:,则该文件是从NSArra

我正在做一个应用程序,但我无法获得一个可变数组来接受对象。我尝试设置断点来查看发生了什么,但它一直说可变数组为nil。有人有答案吗? 我的代码:


[NSMutableArray initWithContentsOfFile:]。您确定要加载的文件存在并且格式正确吗?

[NSMutableArray initWithContentsOfFile:]。确实要加载的文件存在并且格式正确吗?

如果可以在NSMutableArray上调用initWithContentsOfFile:,则该文件是从NSArray继承的。返回值是不可变的NSArray。如果要将对象添加到可变数组中,必须执行以下操作:

mutableArray = [[[NSMutableArray alloc] initWithContentsOfFile: file] mutableCopy];
[mutableArray addObject:newObject];
[mutableArray writeToFile:file atomically:YES];
现在,addObject:调用应该可以工作了


致以最诚挚的问候。

虽然initWithContentsOfFile:可以在NSMutableArray上调用,但它是从NSArray继承的。返回值是不可变的NSArray。如果要将对象添加到可变数组中,必须执行以下操作:

mutableArray = [[[NSMutableArray alloc] initWithContentsOfFile: file] mutableCopy];
[mutableArray addObject:newObject];
[mutableArray writeToFile:file atomically:YES];
现在,addObject:调用应该可以工作了


致以最诚挚的问候。

请尝试使用断点进行检查

mutableArray = [[NSMutableArray alloc]initWithContentsOfFile: file];
线路。将光标移动到可变数组上,如果它显示为u NSArrayI,则表示它是一个不可变数组,即您无法更新它;如果它显示为u NSArrayM,则表示它是一个可变数组,并且您可以更新此数组。 在你的情况下,你得到的是不可变的数组,这就是为什么你不能更新它。 所以有两种方法可以从这个文件中获取可变数组-

方法:1

方法:2


在这两种情况下,可变数组都是可变数组。您可以更新它。

尝试在“断点”打开时进行检查

mutableArray = [[NSMutableArray alloc]initWithContentsOfFile: file];
线路。将光标移动到可变数组上,如果它显示为u NSArrayI,则表示它是一个不可变数组,即您无法更新它;如果它显示为u NSArrayM,则表示它是一个可变数组,并且您可以更新此数组。 在你的情况下,你得到的是不可变的数组,这就是为什么你不能更新它。 所以有两种方法可以从这个文件中获取可变数组-

方法:1

方法:2


在这两种情况下,可变数组都是可变数组。您可以更新它。

再次阅读代码,mutableArray是您对象上的成员变量吗?你是在初始化它还是在其他地方更改它?确保在调用initWithContentsOfFile:后直接设置断点,以查看设置的内容。@EduardoFont:在您的问题中,您说。。。它一直说可变数组是nil,在上面的评论中,你说Xcode说它不是nil。那么可变数组是否为零?您还可以检查writeToFile的返回值:。同意Martin的说法,我认为这里返回NO。苹果说[writeToFile:atomically:]如果所有对象都不是属性列表对象,则返回NO可变数组为nil,但文件和其他数组不是nil@SvenTan你是对的,我的对象不是属性列表对象,但现在我正试图对它进行编码,但是调试器说它无法读取我从保存对象的plist加载的数据。有什么解决方案吗?再次阅读代码,mutableArray是对象上的成员变量吗?你是在初始化它还是在其他地方更改它?确保在调用initWithContentsOfFile:后直接设置断点,以查看设置的内容。@EduardoFont:在您的问题中,您说。。。它一直说可变数组是nil,在上面的评论中,你说Xcode说它不是nil。那么可变数组是否为零?您还可以检查writeToFile的返回值:。同意Martin的说法,我认为这里返回NO。苹果说[writeToFile:atomically:]如果所有对象都不是属性列表对象,则返回NO可变数组为nil,但文件和其他数组不是nil@SvenTan你是对的,我的对象不是属性列表对象,但现在我正试图对它进行编码,但是调试器说它无法读取我从保存对象的plist加载的数据。有解决方案吗?奇怪的是,我的实验表明initWithContentsOfFile:总是返回一个可变数组:id a=[[NSArray alloc]initWithContentsOfFile:@file];boolx=[a iskindof类:[NSMutableArray类]];报告x==是。在iOS模拟器上尝试使用Xcode 4.5。奇怪的是,我的实验表明initWithContentsOfFile:总是返回一个可变数组:id a=[[NSArray alloc]initWithContentsOfFile:@file];boolx=[a iskindof类:[NSMutableArray类]];报告x==是。在iOS模拟器上尝试使用Xcode 4.5。您确定在.h文件中声明了NSMutableArray吗?还要检查mutableArray内存是否得到分配,这样就可以很容易地找出问题所在。您确定在.h文件中声明了NSMutableArray吗?还要检查mutableArray内存是否得到分配,这样就可以很容易地找出问题所在。
NSArray *anyArray = [[NSArray alloc]initWithContentsOfFile: file];
mutableArray = [[NSMutableArray alloc]initWithArray:anyArray];