2011-09-21 86 views
0

我的countTextView返回3.我已验证for循环确实被调用了3次。 1在if语句中,2在else语句中。但是当我尝试NSLog出数组时,它只包含1个对象。为什么?将相同的NSDictionary添加到NSMutableArray多个时间问题

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
for (int i = 1; i <= [countTextView.text intValue]; i++) { 
    NSLog(@"called %i times", i); 
    // prepare keys and object needed to created a dic to save booking info. 
    NSArray *keys = [NSArray arrayWithObjects:@"PickUpAddress", @"Time", nil]; 
    NSArray *objects = [NSArray arrayWithObjects:[addressTextView.text stringByReplacingOccurrencesOfString:@"\n" withString:@" "], date , nil]; 
    NSDictionary *statusInfoDic = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 
    if ([prefs objectForKey:@"StatusInfoArray"] == nil) { 
     NSArray *statusInfoArray = [NSArray arrayWithObject:statusInfoDic]; 
     [prefs setObject:statusInfoArray forKey:@"StatusInfoArray"]; 
     [prefs synchronize]; 
     NSLog(@"nil called on %i", i); 
    } 
    else { 
     NSMutableArray *currentStatusInfoArray = [NSMutableArray arrayWithArray:[prefs objectForKey:@"StatusInfoArray"]]; 
     [currentStatusInfoArray addObject:@"statusInfoDic"]; 
     [prefs synchronize]; 
     NSLog(@"not nil called on %i ", i); 
    } 
} 
NSLog(@"statusInfoArray : %@", [prefs objectForKey:@"StatusInfoArray"]); 
+0

呀, else leg addObject是一个no-op。如果你想statusInfoArray是可变的,你应该可以这样创建它。或者在else脚本中使用setObject来替换旧数组。 –

回答

2

在你的其他部分要创建一个 'arrayWithArray'。这个语句给你一个新创建的(重复的)数组对象的句柄 - 所以你要添加到这个新的数组中 - 但是你没有在任何地方保存结果 - 所以你要添加一个从未使用过的数组。

改变这一行:

NSMutableArray *currentStatusInfoArray = [NSMutableArray arrayWithArray:[prefs objectForKey:@"StatusInfoArray"]]; 

此相反:

NSMutableArray *currentStatusInfoArray = [prefs objectForKey:@"StatusInfoArray"]; 

我想你会发现一切是更好的。

编辑:

其实上述不起作用,因为PREF的总会给你回一个不可改变的阵列。你将需要做的是,而不是取代你的偏好设定状态信息阵列中的每个时间:

所以忽略上述,而是:

更换

[currentStatusInfoArray addObject:@"statusInfoDic"]; 

有:

[currentStatusInfoArray addObject:@"statusInfoDic"]; 
[prefs setObject:currentStatusInfoArray forKey:@"StatusInfoArray"]; 
+1

'[prefs objectForKey:@“StatusInfoArray”];'将返回一个非可变数组。除此之外,我们不需要使用'arrayWithArray'释放对象返回给我们? –

+0

是的,你是正确的 - 有点草率回答 - 已编辑我的文章,但没有时间审查 - 下次将需要更多时间:) – gamozzii

+0

哦,是的,我忘了重写现有的数组。 –

相关问题