在类之间保存数组

时间:2012-04-10 18:05:14

标签: iphone objective-c cocoa-touch

目前正在尝试保存根据UITableView中的哪些单元格填充的数组,并将此数组保存在单独对象的实例中。我正在使数组填充得很好,但是,我的保存方法,这是一个通过单击条形按钮调用的IBAction似乎不起作用。这是一些代码:

-(IBAction)saveWorkout:(id)sender {
    Workouts *new = [[Workouts alloc] init];
    [new addNewWorkout:customWorkout];

    [customWorkout removeAllObjects];
}

此代码来自第一堂课。

以下是Workouts类中我的addNewWorkouts方法的代码:

-(void)addNewWorkout:(NSMutableArray*)array {
    NSMutableArray *temp = [[NSMutableArray alloc] init];
    temp = array;

    self.workoutList = temp;

    [temp release];

}

这是我的“Workout.h”

#import <Foundation/Foundation.h>


@interface Workouts : NSObject {
    NSString *workoutName;
    NSMutableArray *workoutList;
    NSString *description;
    int *reps;
    int *weights;
    int *sets;
}
@property (nonatomic, retain) NSString *workoutName;
@property (nonatomic, retain ) NSString *description;
@property (nonatomic, retain) NSMutableArray *workoutList;

-(void)addNewWorkout:(NSMutableArray*)array;

@end

在运行此代码之前,我收到来自Xcode的警告说'锻炼可能无法响应'addNewWorkouts。'

有谁知道导致此错误的原因是什么?一旦我建立&amp;运行,我点击保存按钮,应用程序崩溃,无法识别的选择器发送到实例0x3b04410错误。

1 个答案:

答案 0 :(得分:2)

你致电[new addNewWorkouts:customWorkout] 当方法的选择器为addNewWorkout:时(注意方法名称中没有复数)

这将导致错误的方法调用并导致崩溃。

此外,addNewWorkout方法的内存管理存在问题。

1- NSMutableArray *temp = [[NSMutableArray alloc] init];
2- temp = array;
3- self.workoutList = temp;
4- [temp release];

在第1行分配一个新的NSMutableArray,然后在用'array'替换它的指针时,在第2行丢失它的引用。您刚刚进行的分配将丢失,程序将泄漏。

然后,在第4行,您向'temp'发送一条释放消息,该消息实际上指向'array',导致释放您收到的参数,而不是临时对象。

有没有理由你创建一个临时数组?您可以根据需要分配属性并使属性复制或保留属性。