1

我们开发了 diff 员工将使用的 iPhone 应用程序。组织(实际上我们还没有做企业应用,而是将这个应用放在应用商店收费),所以我们想要的是每当人们安装应用时,应用会第一次打开,一个弹出up 会过来询问输入 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)。请有人告诉我完成任务的方法,我最终会用这种逻辑尝试所有方面。

4

3 回答 3

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"];

并使用此 URL 以供进一步使用。

于 2012-12-04T08:48:53.473 回答
1

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

  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"];
    }
    
于 2012-12-04T09:34:36.827 回答
0

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

于 2012-12-04T08:31:55.137 回答