0

我目前有一个函数写成saveWorkout,它将一个NSMutableArray从一个Singleton类中保存到另一个NSMutableArray。这个函数是第一次运行,但是当我第二次运行它时,它擦除之前存储在元素0中的内容,并将其替换为新数组(当用户单击表格时收集的字符串集合) 。NSMutableArray覆盖以前存储的元素

这里是我的功能:

-(IBAction)saveWorkout{ 
    WorkoutManager *workoutManager = [WorkoutManager sharedInstance]; 

    [[workoutManager workouts] insertObject: customWorkout atIndex: 0]; 

    NSLog(@"%@", [workoutManager workouts]); 

} 

customWorkout是什么initialially创建NSMutableArray的(基于用户点击了什么)。因此,如果我的第一个数组由blah1,blah2组成,那么这两个值将存储在训练数组中。然而,如果我然后点击blah2,blah 3,训练数组将有两个标识数组(blah2,blah3),并且它不保留第一个数组。任何想法为什么发生这种情况?

这是我如何形成customWorkout:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    NSString *str = cell.textLabel.text; 

    [customWorkout insertObject:str atIndex:0]; 

    //Test Code: Prints Array 
    NSLog(@"%@", customWorkout); 
} 

回答

2

我会告诉你,你可以将这个逻辑错误....

您使用的是相同的customWorkout对象一遍又一遍,以插入在训练数组中...(所以它的指针是相同的),而你需要做的是创建一个customWorkout数组的副本,然后将其插入锻炼数组中...试试这个,而不是......

[[workoutManager workouts] insertObject: [[customWorkout mutableCopy] autorelease]atIndex: 0]; 

这应该工作,除非你在代码中做别的事情。

0

[[workoutManager workouts] insertObject: customWorkout atIndex: 0];不复制customWorkout的内容...相反,它只是保留对customWorkout的引用。因此,您的代码只是将多个引用存储到同一个对象,最终(无意)在第二次运行时编辑该对象。

您需要:

  • 复制通过copycustomWorkout对象,当你将它存储在workouts
    OR:指定customWorkout每次
  • 到一个新的NSMutableArray比如你做一个saveWorkout

任一路径应该不要将您存储的NSMutableArray修改为workouts集合。第一种选择可能在内存管理方面更为明确......