我不会解释为什么我不能简单地添加[sortedArray release];在这个方法的最后。每次我这样做,都会崩溃。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSString *workoutName = [event.assignedWorkout valueForKey:@"name"];
self.title = workoutName ;
NSMutableArray *sortedArray = [[NSMutableArray alloc]init];
// Sort ExerciseArray
int y = 0;
int x= 0;
do{
if ([[[exerciseArray objectAtIndex:y] index]intValue] == x){
[sortedArray addObject:[exerciseArray objectAtIndex:y] ];
x++;
}
if (y<[exerciseArray count]-1){
y++;
}else {
y=0;
}
}
while(x <= [exerciseArray count]-1);
exerciseArray = sortedArray;
[self.tableView reloadData];
}
如果有人能指出我正确的方向或参考我的一些文件,我将非常感激。
答案 0 :(得分:2)
您正在将数组分配给exerciseArray
变量,然后释放数组。下次尝试访问exerciseArray
变量时,数组将消失,因为将其分配给exerciseArray
变量不会增加其保留计数。
第一次调用alloc
时,数组对象的保留计数为1。当你将它分配给exerciseArray时,它的保留值仍然是1.然后,当你释放它时,它的保留计数会降到0,你不能期望再次访问该数组。
您应该不释放它(我的偏好),或者通过调用显式保留它:
[exerciseArray release];
exerciseArray = [sortedArray retain];
[sortedArray release];
请注意这两条消息的顺序。第一行释放exerciseArray
变量指向的任何现有对象。第二行将新数组的保留计数提高到2,然后第二行将其降为1,因此数组仍然保留。如果在将新数组分配给sortedArray
变量之前释放exerciseArray
,则保留计数将变为0,并且在将其分配给新变量之前将丢失它。
答案 1 :(得分:0)
您可能想要这样做:
[exerciseArray release];
exerciseArray = sortedArray;
[self.tableView reloadData];
顺便说一下,您可以使用带有sortedArrayUsingComparator的块对数组进行排序。