NSMutableDictionary数据未保存在错误文件目录的文件中

时间:2014-03-25 19:41:11

标签: ios objective-c nsmutabledictionary

我有两个UITextField

  1. 电子邮件
  2. 密码
  3. 这两个字段值存储在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设置不正确。如果有任何类似的解决方案,请与我分享。提前致谢。祝你有个美好的一天。

2 个答案:

答案 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);
}

请原谅我任何错别字。我没有为你编译:-)