[英]iOS - NSMutableArray won't get filled
我基本上有一個UIViewController
的custon子類,該子類具有一個稱為waypoints
的NSMutableArray
。 我在控制器的-(void)viewDidLoad
方法中將其初始化
waypoints = [[NSMutableArray alloc] init];
后來,在一個方法,它被通過一個稱為presentedViewController
一些參數,包括一個NSMutableDictionary
為waypointData
,我打電話
[waypoints insertObject:waypointData atIndex:0];
我也嘗試過
[waypoints addObject:waypointData];
但兩者似乎都不起作用!
我在那里記錄了一些東西,以使其更加清晰。 參數正確傳輸,並且保存在waypointData
下的NSMutableDictionary
是正確的內容。 在插入之前記錄waypoints
數組會顯示其為空(這是正確的;應用已啟動;尚未添加任何數據),並且在插入后仍為空。 日志:
2014-02-19 14:40:11.050插入前xxx [xxx]航點:(空:)
2014-02-19 14:40:11.051 xxx [xxx]插入航點
2014-02-19 14:40:11.052插入后的xxx [xxx]航點:(空:)
gets logged directly before the insertion, so the program routine is really executing the insertObject:atIndex
: method. 在插入之前直接被記錄,因此程序例程實際上在執行insertObject:atIndex
:方法。
TL; DR:即使NSMutableArray
insertObject:atIndex:
和-addObject:
被調用,該對象也不會插入到數組中。
編輯:
此方法也在-viewDidLoad
調用:
- (void)loadWaypoints {
id unarchivedObject = [NSKeyedUnarchiver unarchiveObjectWithFile:[[self applicationDocumentsDirectory] stringByAppendingString: kAppDataFilePlistName]];
waypoints = (NSMutableArray *)unarchivedObject;
}
如果尚未保存任何內容,則unarchivedObject
當然為NULL
。 感謝0x7fffffff。
檢查您的waypoints
NSArray
,當您在[waypoints addObject:waypointData];
處調用時不應nil
[waypoints addObject:waypointData];
確保“航點”數組不為零的最簡單方法是執行以下操作:
if (!waypoints)
{
waypoints = [NSMutableArray new];
}
[waypoints insertObject:waypointData atIndex:0];
要么
if (!waypoints)
{
waypoints = [NSMutableArray new];
}
[waypoints addObject:waypointData];
聽起來您的航點數組為零。 發布您的頭文件,包括路標的聲明。 將整個viewDidLoad方法發布到您創建空數組的位置。
我可能想到的2個最可能的原因是,您將航路點聲明為弱點,或者在viewDidLoad中具有局部變量航路點,並且在局部變量中創建了一個空數組,但未將其保存到實例變量中。
在viewDidLoad中創建空數組的行處設置一個斷點。 遍歷它,並確保正在創建您的陣列。 然后,右鍵單擊調試器窗口的變量部分中的變量,然后向該變量添加觀察點。 如果將其清除,則斷點將導致您的程序在有問題的行處中斷。
(我的帖子假設您正在使用ARC。是嗎?)
請使用以下代碼:
if(waypoints == nil){
waypoints = [[NSMutableArray alloc] init];
}
[waypoints addObject:waypointData];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.