2013-08-22 2 views
0

별도의 뷰 settingsViewController에 많은 행이 포함 된 UIPickerView가 있습니다. 행이 선택되면 NSUserDefaults를 통해 데이터를 내 mainViewController로 전달합니다. 그러나 settingsViewController로 돌아가서 행을 변경하지 않고 저장 버튼을 누르면 pickerView가 'nil'값을 보내는 것처럼 보입니까?별도 뷰의 UIPickerView 값이 손실 됨

여기에 UIPickerView 코드와 행을 전달하는 코드가 있습니다.

//PickerViewCode 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [picker selectRow:[defaults integerForKey:@"pickerRow"] inComponent:0 animated:YES]; 
} 

} 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
return 1; 

} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: 
(NSInteger)component { 
{ 
    if ([skolor count] == 0) 
     return 1; 
    return [skolor count]; 
}} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row 
forComponent:(NSInteger)component { 
return [skolor objectAtIndex:row]; 
} 


- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row 
    inComponent:(NSInteger)component { 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setInteger:row forKey:@"pickerRow"]; 

//Passing pickerViewValue 
- (IBAction)selectedRow:(id)sender { 

SchoolSoftViewController2 *vc1 = [self.storyboard 
instantiateViewControllerWithIdentifier:@"webview1"]; 
NSString *urlString = [valdSkola absoluteString]; 
[[NSUserDefaults standardUserDefaults] setObject:urlString forKey:@"UserURL"]; 
[self presentViewController:vc1 animated:YES completion:nil]; 

} 

답변

0

NSUserDefaults는 setObject : forKey : 메서드 호출로 정보를 설정 한 직후 정보를 저장하지 않습니다. 그것을 강제로 저장하려면 urlString을 기본값으로 설정 한 후에 뷰 컨트롤러를 표시하기 전에 동기화하도록 지시하십시오.

NSString *urlString = [valdSkola absoluteString]; 
[[NSUserDefaults standardUserDefaults] setObject:urlString forKey:@"UserURL"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
[self presentViewController:vc1 animated:YES completion:nil]; 

또한 당신이 행 설정 여기서이 value.like 선택한 선택기를 설정하는

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setInteger:row forKey:@"pickerRow"]; 
[defaults synchronize]; 
+0

그 부분은 이미 작동합니다. 그것을 저장하고 mainViewController에 올바른 값이로드됩니다. 그것은 settingsViewController로 돌아가서 값을 변경하지 않고 save 버튼을 누를 때만입니다. pickerView는 여전히 mainViewController에로드되지 않는 같은 값을 표시합니다 – Pierre

+0

행은로드하지만 다른 값은로드되지 않습니다. . – Pierre

0

시도합니다.

int row = [pickerView selectedRowInComponent : COMPONANT_INDEX]; 는 NSString * STR = YOUR_ARRAY objectAtIndex : 행]; //이 중단 될 수 어레이가 비어 있으면

[NSUserDefaults standardUserDefaults]의 setObject : STR forKey "UserURL"@]; [[NSUserDefaults 표준 사용자 정의]] 동기화];

, 귀하의 경우 NSString * urlString = [valdSkola absoluteString]; // 이것은 nil을 반환합니다.