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