我目前有一个名为saveWorkout的函数,它将一个NSMutableArray从Singleton类保存到另一个NSMutableArray。此函数在第一次运行时起作用,但是,当我第二次运行它时,它会擦除先前存储在元素0中的内容并将其替换为新数组(当用户单击表时收集的字符串集合) 。
这是我的功能:
-(IBAction)saveWorkout{
WorkoutManager *workoutManager = [WorkoutManager sharedInstance];
[[workoutManager workouts] insertObject: customWorkout atIndex: 0];
NSLog(@"%@", [workoutManager workouts]);
}
customWorkout是最初创建NSMutableArray的内容(基于用户点击的内容)。因此,如果我的第一个数组由blah1,blah2组成,那么这两个值将存储在workouts数组中。但是,如果我然后单击blah2,blah 3,则锻炼数组将具有两个identicle数组(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);
}
答案 0 :(得分:2)
我会告诉你你正在制造的逻辑错误......
您反复使用相同的customWorkout对象插入到锻炼数组中...(因此它的指针相同)而您需要做的是创建customWorkout数组的副本,然后将其插入锻炼阵列......试试这个......
[[workoutManager workouts] insertObject: [[customWorkout mutableCopy] autorelease]atIndex: 0];
除非您在代码中执行其他操作,否则这应该有效。
答案 1 :(得分:0)
[[workoutManager workouts] insertObject: customWorkout atIndex: 0];
不会复制customWorkout
的内容...而只是保留对customWorkout
的引用。因此,您的代码只是存储对同一对象的多个引用,您最终(无意中)在第二次运行时进行编辑。
您需要:
customWorkout
对象存储在copy
时通过workouts
复制
customWorkout
NSMutableArray
分配给新的saveWorkout
个实例
这两种路线都不会让您修改存储在NSMutableArray
集合中的workouts
。在内存管理方面,第一个选项可能更清晰......