我基本上有一个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。
答案 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];