将NSDictionary写入ONLINE .plist。可能吗?

时间:2015-04-17 21:38:04

标签: objective-c xcode plist writetofile

我正在为即时通讯编写应用程序,而且我被卡住了。

我能够从我的保管箱上的plist中读取数据(字典),但是我无法从我的应用程序中修改它,我真正希望实现的是什么。

以下是我阅读在线.plist文件的方法:

@Implementation
NSDictionary *wholePlist;
-(void)viewDidLoad
{
     wholePlist = [[NSDictionary alloc]initWithContentsOfURL: [NSURL URLWithString:[NSString stringWithFormat:@"https://dl.dropboxusercontent.com/s/cfpree9see19t00/users.plist"]]];

     self.allUsers = [wholePlist objectForKey:@"allUsers"];
} //self.allUsers is NSDictionary, also.

如果我改变它,这就是我试图保存的方式

- (IBAction)registerButtonPressed:(UIButton *)sender {

    NSString *username = self.usernameTextField.text;
    NSString *password = self.setPassTextField.text;
    NSMutableArray *myContacts = [[NSMutableArray alloc]init];
    NSMutableArray *inbox = [[NSMutableArray alloc]init];

    NSDictionary *user = [[NSDictionary alloc]initWithObjects:@[username, password, myContacts, inbox] forKeys:@[@"username",@"pass",@"myContacts",@"inbox"]];

    if ([user isEqualToDictionary:[self.allUsers objectForKey:username]]) {
        [[[UIAlertView alloc]initWithTitle:@"Registration error" message:@"Username already taken. Please, choose another username." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]show];
    } else {
        NSURL *plistURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://dl.dropboxusercontent.com/s/cfpree9see19t00/users.plist"]];
        [self.allUsers setValue:user forKey:username];
        [self.allUsers writeToURL:plistURL atomically:YES];
    }
}

如果我使用writeToFile:在本地/离线(在我的Mac或应用程序目录中的某个文件夹中)执行此操作。当我使用writeToURL:时,它无法正常工作。

我的问题是:

  1. 这是否可能,我想要实现的目标是什么?
  2. 是否可以与任何其他存储客户端一起使用?
  3. 如果可以与其他存储客户端一起使用,请给我一些关于如何解释如何的源链接。
  4. 谢谢!

1 个答案:

答案 0 :(得分:1)

即时通讯应用程序几乎总是最好使用sockets完成。我 HIGHLY 建议不要使用服务器上的文件进行读写操作。虽然它是可能的,但你要求的是一个痛苦和顽固的世界。

所以以严格的前瞻方式回答你的问题:

  1. 是的......不要这样做。
  2. 是。当然,您可以使用CloudKit DB或文件上传部分。同样,我建议不要使用这种方法,因为它速度慢,网络开销很高。
  3. 我强烈建议您阅读套接字:http://en.wikipedia.org/wiki/Network_socket以更好地理解这种方法。我有一个用C ++编写的聊天套接字。然而,它比您可能需要的更多:https://github.com/theMonster/ModularServer。此外,node.js这里有一个非常受欢迎的聊天服务器示例:http://socket.io/get-started/chat/
  4. 如果您有任何问题,请与我们联系。