我有两个UITextField
这两个字段值存储在NSMutableDictionary
来电userData
中。现在我想将这两个字段值保存在一个文件中,以便记录保留在那里,我可以恢复此记录以正确检查用户登录。在这里,我想要实现这一点,但不能正常工作。
我的代码:
-(void) saveRegistrationData
{
userData = [[NSMutableDictionary alloc]
initWithObjects:[[NSMutableArray alloc] initWithObjects:@"123456", nil]
forKeys:[[NSMutableArray alloc] initWithObjects:@"admin@gmail.com", nil]];
[userData setObject:passwordTextField.text forKey:emailTextField.text];
NSString *savePath = [@"/MediaFiles/Documents/" stringByExpandingTildeInPath];
[userData writeToFile: savePath atomically: YES];
//[userData writeToFile:@"MediaFiles/Documents/" atomically:YES];
for (id key in userData)
{
NSLog(@"%@ is for %@", key, [userData objectForKey:key]);
}
}
我认为path
设置不正确。如果有任何类似的解决方案,请与我分享。提前致谢。祝你有个美好的一天。
答案 0 :(得分:4)
由于某些原因,它无法运作。
1)您正在写入设备文件系统根目录中的文件夹。 Apple使用沙盒来防止这种情况发生,因为您可以覆盖和修改任何系统文件。
2)您正在写入文件夹而不是文件。要写入文件,您需要指定文件名(和扩展名)。即"/MediaFiles/Documents/dnt_lk_at_dis.plist"
为了解决这些问题,您需要首先获取沙箱的路径(文档目录),然后附加文件路径。
NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filename = @"secret.plist";
NSString *filePath = [docsPath stringByAppendingPathComponent:filename];
此外,我强烈建议您使用钥匙串存储敏感用户信息。任何拥有越狱设备的人,或任何有权访问文件系统的人,如果以纯文本形式存储,都能够提取用户的信息。至少,请在将密码写入磁盘之前加密密码。
答案 1 :(得分:1)
-(void) saveRegistrationData
{
userData = [[NSMutableDictionary alloc] init];
[userData setObject:passwordTextField.text forKey:@"password"];
[userData setObject:emailTextField.text forKey:@"email"];
// Alternative to the above:
userData = [[NSMutableDictionary alloc]
initWithObjects:[[NSMutableArray alloc] initWithObjects:passwordTextField.text, emailTextField.text, nil]
forKeys:[[NSMutableArray alloc] initWithObjects:@"password", @"email" nil]];
NSString *savePath = [@"/MediaFiles/Documents/myDict.plist" stringByExpandingTildeInPath]; // write to a file, not a dictionary
[userData writeToFile: savePath atomically: YES];
for (id key in userData)
{
NSLog(@"%@ is for %@", key, [userData objectForKey:key]); // now you should see the result that you want to.
}
// Alternative for the above - the lazy way of doing it:
NSLog (@"theDictionary: %@", userData);
}
请原谅我任何错别字。我没有为你编译:-)