2013-05-08 53 views
-1

我有一個viewController人們需要填寫一些textfields。當人們在綠地上點擊時,他們會轉向另一個視圖以簽署一個小簽名,然後他們回來。在某處短時間存儲UITextFields值

enter image description here

我在這裏的問題是,當用戶後回來,他進入了他們的簽名。我的文本字段中的值已消失。

就像你可以看到只有帶*的文本域是有義務的。我試着將這些值放在NSDictionary中,並將它們存儲在NSUserdefaults中。但是當我沒有填滿每個文本字段時,我會得到這個錯誤。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: naam)' 

解決此問題的最佳方法是什麼?

回答

0

做這樣的添加這些methods使用時store temporary dataTemp Directoryretrieve從中

#pragma mark 
#pragma mark Data Save 

// need a path 
- (NSString *)getArrayPath 
{ 
    //NSString* path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
    return [NSTemporaryDirectory() stringByAppendingPathComponent:@"temp.dat"]; 
} 

// save an array 
- (void)saveVideoData:(NSMutableArray*)data 
{ 
    [NSKeyedArchiver archiveRootObject:data toFile:[self getArrayPath]]; 
} 

// get that array back 
- (NSMutableArray *)loadSavedData 
{ 
    return [NSKeyedUnarchiver unarchiveObjectWithFile:[self getArrayPath]]; 
} 

保存的值:對於離。

//create array 
NSMutableArray *arrValues = [NSMutableArray arrayWithObjects:txt1.text,txt2.text,txt3.text,nil]; 
[self saveVideoData:arrValues]; 

獲取值:例如,

NSMutableArray *arrValues = [self loadSavedData]; 

通過another view controller添加上述方法ü可以得到data valuesthere也。

+0

這解決了我的問題。我想我會更頻繁地使用它!好的解決方法! – Steaphann 2013-05-08 07:41:23

1

原因: '* setObjectForKey:對象不能是零(關鍵:NAAM)'

說明:你不能在你的NSDictionary設置NULL值。

答:當你textFieldNULL,嘗試存儲「」(空值)NSDictionary

表演檢定這樣的:

if ([textField.text isEqualToString:@""] || textField.text.length == 0) 
{ 
    [yourDict setObject:@"" forKey:@"someKey"]; 
} 
+0

我仍然得到這個錯誤終止應用程序由於未捕獲異常'NSInvalidArgumentException',原因:'*** setObjectForKey:對象不能爲零(鍵:adres)' – Steaphann 2013-05-08 06:59:44

+0

@StefGeelen:嘗試添加一個更多的條件到你的If聲明。再次檢查我的代碼。你必須檢查所有的TextFields。 – Bhavin 2013-05-08 07:03:49

+0

@StefGeelen:同時檢查BreakPoints,你可以在這行''yourDict setObject:@「」forKey:@「someKey」];'或不當你的textField爲空。 – Bhavin 2013-05-08 07:13:00

1

您可以檢查該鍵是否存在爲:

NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; 

    if ([defs objectForKey:@"naam"]) // Here it is YES if the key naam exists else no 
    { 
     // Key naam does exists 
     // set that value in textfield 
    } 
    else 
    { 
    // Key naam does not exist 
    } 

希望它可以幫助你。

0
  1. 創建一個單例類。
  2. 將你的值放在那裏(如果值爲零,則爲該值輸入「」)
  3. 一旦你回到控制器就取回該值。
0

如果你正試圖在字典中設置NULL值,那麼你會得到這個錯誤。所以,請儘量使用這個one.And你應該爲所有的文本字段

if (naamTextField.text.lenght == 0) 
    [dic setValue:@"" forKey:@"NAAM"]; 
else 
    [dic setValue:naamTextField.text forKey:@"NAAM"]; 
if (emailTextField.text.lenght == 0) 
    [dic setValue:@"" forKey:@"EMAIL"]; 
else 
    [dic setValue:emailTextField.text forKey:@"EMAIL"]; 
0

只存儲具有值的文本字段。

-(void)textFieldDidEndEditing:(UITextField *)textField{ 
    NSMutableDictionary *dictionary = [NSMutableDictionary new]; 
    if(textField.text.length > 0){ 
     [dictionary setObject:textField.text forKey:@"<somekey>"]; 

     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     [defaults setObject:dictionary forKey:@"<defaultKey>"]; 
     [defaults synchronize]; 
    } 

}

並在viewDidAppear只加載取從默認字典,並顯示它

0

爲您的問題的一種簡單的解決方案可以是,僅僅pushing/presenting超過yourViewControlleranotherViewController然後pop/dismissanotherViewController作爲yourViewControlleranotherViewController的根部,因此它仍然保持在它之前的狀態。所有字段都填充了以前的值。

0

一般來說,如果你推/本yourviewController到其他的viewController和POP/dimiss,推高控制器,通常在文本字段中的值,直到你寫的東西viewWillAppear中不改變...

這是不應該的!一般