0

最初にjsonデータをファイルに保存し、次にファイルからデータを読み取るメソッドを作成しました。

シミュレーターで実行するとデータを保存および読み取ることができますが、iPhone でアプリケーションを実行してデバッグしようとすると、データを保存または取得しません。

- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSMutableData *retrievedData = [NSMutableData data];
    [retrievedData appendData:data];

    NSMutableString *allInfo = [[NSMutableString alloc] initWithData:retrievedData encoding:NSASCIIStringEncoding];

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"credentials" ofType:@"json"];

    NSData *userCredentials = allInfo;
    [userCredentials writeToFile:filePath atomically:YES];

    NSError *error;
    NSData* JSONData = [NSData dataWithContentsOfFile:filePath];
    NSDictionary *JSONDictionary = [NSJSONSerialization JSONObjectWithData:JSONData options:kNilOptions error:&error];
    //get the log in information from the credentials file
    NSDictionary *login = [JSONDictionary objectForKey:@"login"];
    //get the auth_token
    NSDictionary *loginInfo = login;

    if(loginInfo == NULL)
    {
        errorMessage.text = @"Invalid username or password";
        errorMessage.hidden = NO;
    }
    else
    {
        NSString *authCode = [loginInfo objectForKey:@"auth_token"];
        [self saveUserCredentials:authCode];
    }
}
4

2 に答える 2

2

ファイルを に書き込むべきではありませんNSBundle。シミュレーターの場合、バグのようです。シミュレーターには、デバイスよりも多くのバグがあります。可能であれば、デバイスではなくデバイスでアプリをテストすることをお勧めします。他の人もこの問題を見てきました。Apple のドキュメントを参照してください。

Application_Home /AppName.app

これは、アプリ自体を含むバンドル ディレクトリです。このディレクトリには何も書き込まないでください。改ざんを防ぐために、バンドル ディレクトリはインストール時に署名されます。このディレクトリに書き込むと署名が変更され、アプリの再起動が妨げられます。

于 2012-12-02T03:06:08.567 に答える
0

私は基本的にこれをしました

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *filepath = [NSString stringWithFormat:@"%@/%@", directory,@"credentials.json"];

そして今、私のコードは iPhone とシミュレーターでデータを取得できます。

于 2012-12-02T22:09:43.133 に答える