Currently attempting to save an array that is populated according to which cells in a UITableView are chosen and saving this array in an instance of a seperate object. I am getting the array to populate just fine, however, my save method, which is an IBAction that is invoked by clicking on a Bar Button doesn’t seem to be working. Here is some code:
-(IBAction)saveWorkout:(id)sender {
Workouts *new = [[Workouts alloc] init];
[new addNewWorkout:customWorkout];
[customWorkout removeAllObjects];
}
This code is from the first class.
And here is the code for my addNewWorkouts method in the Workouts class:
-(void)addNewWorkout:(NSMutableArray*)array {
NSMutableArray *temp = [[NSMutableArray alloc] init];
temp = array;
self.workoutList = temp;
[temp release];
}
Here is my “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
Before running this code, I get a Warning from Xcode saying that ‘Workouts may not respond to ‘addNewWorkouts.’
Anyone know what is causing this error? Once I build & run, I click on the Save button and the app crashes with a unrecognized selector sent to instance 0x3b04410 error.
You call
[new addNewWorkouts:customWorkout]when the method’s selector is
addNewWorkout:(note that there is no plural in the method name)This will make a bad method call and result in a crash.
Also, there is a problem with the memory management of the addNewWorkout method.
You allocate a new NSMutableArray on line 1, then lose its reference on line 2 when you replace its pointer by ‘array’. The allocation you just made is lost and the program will leak.
Then, on line 4, you send a release message to ‘temp’ which actually points to ‘array’, resulting in the release of the parameter that you received and not the temporary object.
Is there a reason whny you create a temporary array? You can just assign the property and make the property copy or retain it, depending on your needs.