iOS - NSMutableArray不会被填充

时间:2014-02-19 13:55:36

标签: ios iphone objective-c cocoa

我基本上有一个UIViewController的custon子类,其NSMutableArray名为waypoints。我使用

在控制器的-(void)viewDidLoad方法中初始化它
waypoints = [[NSMutableArray alloc] init];

稍后,在一个通过presentedViewController调用某个参数包含NSMutableDictionary作为waypointData的方法中,我调用

[waypoints insertObject:waypointData atIndex:0];

我也试过

[waypoints addObject:waypointData];

但似乎都不起作用!

我在那里记录了一些东西以使其更清晰。参数传输正确,NSMutableDictionary下保存的waypointData是正确的内容。在插入之前记录waypoints数组显示为空(这是正确的;应用程序已启动;尚未添加任何数据),并且在插入之后它仍为空。日志:

  

2014-02-19 14:40:11.050 xxx [xxx]插入前的航路点:( null :)
  2014-02-19 14:40:11.051 xxx [xxx] INSERT WAYPOINT
  2014-02-19 14:40:11.052 xxx [xxx]插入后的航路点:(null:)

在插入之前直接记录

INSERT WAYPOINT ,因此程序例程实际上正在执行insertObject:atIndex:方法。

TL; DR: 即使调用insertObject:atIndex:的{​​{1}}(和-addObject:),对象也不会插入到数组中。

修改:
此方法也会在NSMutableArray中调用:

-viewDidLoad

- (void)loadWaypoints { id unarchivedObject = [NSKeyedUnarchiver unarchiveObjectWithFile:[[self applicationDocumentsDirectory] stringByAppendingString: kAppDataFilePlistName]]; waypoints = (NSMutableArray *)unarchivedObject; } 当然是unarchivedObject,如果还没有保存的话。感谢0x7fffffff。

4 个答案:

答案 0 :(得分:4)

waypoints致电时,检查NSArray nil [waypoints addObject:waypointData];不应该是{{1}}

答案 1 :(得分:1)

确保你的'航点'阵列不是零的最简单方法就是这样做:

if (!waypoints)
{ 
    waypoints = [NSMutableArray new];
}
[waypoints insertObject:waypointData atIndex:0];

if (!waypoints)
{ 
    waypoints = [NSMutableArray new];
}
[waypoints addObject:waypointData];

答案 2 :(得分:0)

听起来你的航点数组是零。发布您的头文件,包括航点的声明。发布您创建空数组的整个viewDidLoad方法。

我能想到的两个最可能的原因是你将路径点声明为弱点,或者你在viewDidLoad中有一个局部变量路点,并且你在局部变量中创建一个空数组但是没有将它保存到实例中变量

在viewDidLoad中创建空数组的行中设置断点。跳过它并确保您的阵列正在创建。然后在调试器窗口的变量部分中右键单击变量,并向该变量添加一个观察点。如果它被清除,那么断点将导致程序在违规行处中断。

(我的帖子假设您正在使用ARC。是吗?)

答案 3 :(得分:-4)

请使用以下代码:

  

if(waypoints == nil){

     

waypoints = [[NSMutableArray alloc] init];

     

}

     

[waypoints addObject:waypointData];