如何将数据存储到iPhone应用程序

时间:2012-12-04 06:02:14

标签: objective-c ios

我们开发了将由diff的员工使用的iphone应用程序。组织(实际上我们还没有将它作为企业应用程序,而是我们将把这个应用程序放在应用程序商店收费),所以我们想要的是每当有人安装应用程序时,应用程序将首次打开一个弹出窗口会出现在那里,要求输入URL (这将是指向该人员组织服务器的URL),所以通过代码逻辑,我想要的是什么时候我们将登录视图中的页面确实加载我想检查URL是否已经存储在应用程序中,如果它没有存储,那么我将弹出询问输入URL,如果存储,那么我只是允许他进入登录详细信息。

我的问题是我应该如何存储该URL以及我应该在哪里存储该URL以及我应该如何检查它是否已经存储。我试图将该URL存储在...其中urlfield.text是我要存储的URL。

NSError *error;
    // For error information

    // Create file manager
    fileMgr = [NSFileManager defaultManager];

    // Point to Document directory
    documentsDirectory = [NSHomeDirectory() 
                          stringByAppendingPathComponent:@"Documents"];
    fileExists = [[NSFileManager defaultManager] fileExistsAtPath:filePath];
    // File we want to create in the documents directory 
    // Result is: /Documents/file1.txt
    filePath = [documentsDirectory 
                stringByAppendingPathComponent:@"file1.txt"];
    str=urlField.text;
    // Write the file
    [str writeToFile:filePath atomically:YES 
            encoding:NSUTF8StringEncoding error:&error];

    // Show contents of Documents directory
    NSLog(@"Documents directory: %@",
          [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);

我正在检查它是否存在..

 // fileExists is a BOOL variable
          fileExists = [[NSFileManager defaultManager] fileExistsAtPath:filePath]; 
         NSLog(@"Boolean value:=%d",fileExists);
        if ( fileExists  == 0 ) 
        {
           .......
          ........
        }

但每次我运行应用程序时它返回'0'(表示BOOL变量fileExists)。 请有人告诉我完成任务的方法,我最终会尝试所有方面的逻辑。

3 个答案:

答案 0 :(得分:5)

我使用NSUserDefaults。

首先检查用户是否第一次打开应用程序我检查NSUserDefault的第一个对象的值,如

 //defaults is a object of NSUserDefault 
NSString *URLEntered =[defaults objectForKey:@"URLISENTERED"];
if (!URLEntered)  {

        [defaults setValue:@"0" forKey:@"URLISENTERED"];
    }

URLEntered第一次返回null,所以我为Key URLISENTERED设置值0

我允许用户输入组织服务器的URL, 在其中,我将关键URLISENTERED的值设置为1,如

[defaults setValue:@"1" forKey:@"URLISENTERED"];

同时我再拿一个NSUserDefault对象来存储服务器的URL并存储就像

// defaultURL is the object of NSUserDefault, and main URL is the URL of server user entered

[defaultURL setValue:mainURL forKey:@"mainURL"];

所以接下来当用户再次登录应用程序时

的值
[defaults objectForKey:@"URLISENTERED"]

是我们设置的1,那个时候我直接导航用户登录屏幕,并使用

获取了mainURL的值
mainURL=[defaultURL objectForKey:@"mainURL"];

并使用此网址进一步使用。

答案 1 :(得分:1)

据我了解您的问题,您可以使用 NSUserDefault plist

  1. 使用plist:

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"plist.plist"]; 
    NSFileManager *fileManager = [NSFileManager defaultManager];
    
    if (![fileManager fileExistsAtPath: path]) 
    {
        path = [documentsDirectory stringByAppendingPathComponent: [NSString stringWithFormat: @"plist.plist"] ];
    }
    
    NSMutableDictionary *data;
    NSString *userURL ;
    
    if ([fileManager fileExistsAtPath: path]) 
    {
                data = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
                //To retrieve the data from the plist
                NSMutableDictionary *savedURL= [[NSMutableDictionary alloc] initWithContentsOfFile: path];
    
    userURL = [savedURL objectForKey:@"USER_URL"];
    NSLog(@"%@",userURL);
             // present login detail or more stuff with userURL
    }
    else
    {
    
        userURL = // prompt for user to enter URL 
        data = [[NSMutableDictionary alloc] init];
       [data setObject:[NSNumber numberWithInt:value] forKey:@"USER_URL"];
       [data writeToFile: path atomically:YES];
    
    }
    
  2. 使用NSUserDefault:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *userURL = [defaults objectForKey:@"USER_URL"];
    if(userURL) {
            NSLog(@"%@",userURL);
            //present login detail or more stuff with userURL
    }
    else {
    userURL = // prompt for userURL
    [defaults setObject:userURL forKey:@"USER_URL"];
    }
    

答案 2 :(得分:0)

实际上,如果您想检查客户端上的URL。您可以使用sqlite数据库完成此任务。