2011-07-02 5 views
3

이 코드 조각에 문제가 있습니다. 나중에 데이터를 plist에 저장하려고합니다. 사용자가보기를 다시 열면 각 세그먼트에 현재 선택된 세그먼트가 있어야합니다. 내보기에 대한 통제. 나는 시도하고 정보를 저장할 때plist 세그먼트 컨트롤 저장 문제

그러나, 그것은

[array addObject:gender]; 

당신은 당신의 gender 속성을 초기화하지 않았다가 EXC_BAD_ACCESS

-(IBAction)genderSelection:(id)sender 
{ 
    if([sender selectedSegmentIndex] == kSwitchesSegmentIndex) 
    { 
     gender = @"Male"; 
     //NSLog(gender); 
    } 
    else { 
     gender = @"Female"; 
     //NSLog(gender); 
    } 

} 

-(IBAction)contactTypeSelection:(id)sender 
{ 
    if([sender selectedSegmentIndex] == kSwitchesSegmentIndex) 
    { 
     contactType = @"a"; 
     //NSLog(gender); 
    } 
    else { 
     contactType = @"b"; 
     //NSLog(gender); 
    } 

} 

-(IBAction)saveData:(id)sender 
{ 
    NSMutableArray *array = [[NSMutableArray alloc] init]; 

    [array removeAllObjects]; 

    [array addObject:field1.text]; 
    [array addObject:field2.text]; 
    [array addObject:gender]; 
    [array addObject:contactType]; 

    [array writeToFile:[self dataFilePath] atomically:YES]; 
    [array release]; 
} 

-(NSString *)dataFilePath 
{ 
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

    NSString *documentsDirectory = [path objectAtIndex:0]; 

    return [documentsDirectory stringByAppendingPathComponent:kFilename]; 
} 

-(void)viewWillAppear:(BOOL)animated 
{ 

    NSString *filePath = [self dataFilePath]; 

    if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) 
    { 
     NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath]; 

     field1.text = [array objectAtIndex:0]; 
     field2.text = [array objectAtIndex:1]; 

     gender = [array objectAtIndex:2]; 
     contactType = [array objectAtIndex:3]; 

     if([gender isEqualToString:@"Male"]) 
     { 
      genderSegment.selectedSegmentIndex = 0; 
     } 
     else 
     { 
      genderSegment.selectedSegmentIndex = 1; 
     } 

     if([contactType isEqualToString:@"a"]) 
     { 

     } 
     else 
     { 

     } 


     [array release]; 
    } 
} 

-(IBAction)textDone:(id)sender 
{ 
    [sender resignFirstResponder]; 
} 



- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)dealloc 
{ 
    [gender release]; //need to release 
    [contactType release]; //need to release 
    [field1 release]; //need to release 
    [field2 release]; //need to release 
    [super dealloc]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    gender = @"Male"; 
    contactType = @"a"; 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
} 

- (void)viewDidUnload 
{ 
    gender = nil; //need to release 
    contactType = nil; //need to release 
    field1 = nil ; //need to release 
    field2 = nil; //need to release 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

답변

3

을 제공합니다 : 도와주세요 라인에 충돌 . 당신이 필요합니다

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

    self.gender=[[NSString alloc]init]; 

    self.gender = @"Male"; 

//so something here 

    // Do any additional setup after loading the view from its nib. 

} 

참고 : 다음 @synthesize 컴파일러 지시문을 사용하는 경우 당신이 사방 재산 예를 참조 할자가 점 표기법 필요 self.gender.

+0

나는 .h를 @property를 사용하여 합성하고 그것을 합성했다. – mintuz

+0

sur right.but u는 무언가를 저장하고 그 위에 살고 싶으면 인스턴스화합니다. 따라서 alloc 및 init을 사용하고 store.now U가 해제 될 때까지 메모리를 임대 할 수 있습니다. –

+0

일어난 일 ....... 작동 여부 –