0

当前尝试保存一个数组,该数组根据选择 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;

@结尾

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

有谁知道是什么导致了这个错误?构建并运行后,单击“保存”按钮,应用程序崩溃,并出现无法识别的选择器发送到实例 0x3b04410 错误。

4

1 回答 1

2

[new addNewWorkouts:customWorkout] 当方法的选择器是时你调用addNewWorkout:(注意方法名中没有复数)

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

另外,addNewWorkout 方法的内存管理也有问题。

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

您在第 1 行分配了一个新的 NSMutableArray,然后当您将其指针替换为“数组”时,在第 2 行丢失了它的引用。刚才的分配丢失了,程序会泄露。

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

创建临时数组有什么原因吗?您可以根据需要分配财产并复制或保留财产。

于 2012-04-10T18:10:25.320 回答