1

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 を意味します) が返されます。誰かが私の仕事を達成する方法を教えてください。私はこのロジックですべての側面を試すことになります。

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のもう1つのオブジェクトを取得して、サーバーの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

あなたの問題を理解しているので、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"];
    }
    
于 2012-12-04T09:34:36.827 に答える
0

実際に client で URL を確認したい場合は . このタスクは、sqlite データベースを使用して実行できます。

于 2012-12-04T08:31:55.137 に答える