我有一个viewController
,人们需要填写一些textfields
。当人们点击绿点时,他们会导航到另一个视图以制作一个小签名,然后他们会回来。
我在这里遇到的问题是,当用户回来后,他们进入了他们的签名。我的文本域中的值已经消失了。
就像你只能看到带有*的文本字段一样。我已尝试将这些值放在NSDictionary
中并将其存储在NSUserdefaults
中。但是当我没有填写每个文本字段时,我得到了这个错误。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: naam)'
解决此问题的最佳方法是什么?
答案 0 :(得分:1)
原因:' * setObjectForKey:对象不能为nil(key:naam)'
说明:您无法在NULL
中设置NSDictionary
值。
答案:当textField
值为NULL
时,请尝试在NSDictionary
中存储“”(空值)。
执行以下检查:
if ([textField.text isEqualToString:@""] || textField.text.length == 0)
{
[yourDict setObject:@"" forKey:@"someKey"];
}
答案 1 :(得分: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
}
希望它对你有所帮助。
答案 2 :(得分:0)
答案 3 :(得分:0)
如果您尝试在字典中设置NULL值,则会出现此错误。所以请尝试使用这个。你应该为所有文本字段做这样的事情
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"];
答案 4 :(得分:0)
添加这些methods
以便store temporary data
Temp Directory
和retrieve
使用
#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 values
there
。
答案 5 :(得分: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中加载从默认值中获取字典并显示它
答案 6 :(得分:0)
针对您的问题的简单解决方案可能是pushing/presenting
anotherViewController
超过yourViewController
然后pop/dismiss
anotherViewController
因为yourViewController
位于{ anotherViewController
因此它仍然保持在以前的状态。所有字段都填充了以前的值。
答案 7 :(得分:0)
通常,如果你将yourviewController推送/提供给推送Controller的其他viewController和pop / dimiss,通常文本字段中的值不会改变,直到你在ViewWillAppear中写一些东西......
这不应该发生!!通常