1

デバイスでアプリをテストすると、奇妙な動作が発生します。これは、キーの値を更新するために使用している関数で、iPhone シミュレーターでスムーズに動作します。なるほど。ただし、plist の 6 行目の nslog はデバイスで null を返します。なぜ、私が間違っているのかについて何か考えはありますか? 前もって感謝します

-(void) updateData:(int)contacto campo:(int)campo {

    NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *plistPath = [rootPath stringByAppendingPathComponent:@"Data.plist"];

    NSMutableDictionary *plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
    NSLog(@"%@",plistDict);

    switch (campo) {
        case 0:         
            veterinarioID = contacto;
            [plistDict setValue:[NSNumber numberWithInt:veterinarioID] forKey:@"veterinario"];
            NSLog(@"%d",veterinarioID);
            break;
        case 1:
            peluqueriaID = contacto;
            [plistDict setValue:[NSNumber numberWithInt:peluqueriaID] forKey:@"peluqueria"];
            NSLog(@"%d",peluqueriaID);

            break;
        case 2:
            residenciaID = contacto;
            [plistDict setValue:[NSNumber numberWithInt:residenciaID] forKey:@"residencia"];
            NSLog(@"%d",residenciaID);
            break;
        default:
            break;
    }
    [plistDict writeToFile:plistPath atomically: YES];

}
4

1 に答える 1

2

私の推測では、コードは時間の経過とともに進化し、シミュレーターには長い間既存の辞書がありました。したがって、ファイルは長い間そこにありました。

現在のデバイスでは、ファイルが存在しない場合、辞書はnilであり、メモは常に保存されます。

コードを次のように変更すると、問題が修正されると思います。

NSMutableDictionary *plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
if(!plistDict) plistDict = [NSMutableDictionary new]; // I like using 'new'
NSLog(@"%@",plistDict);
于 2012-09-22T12:07:19.607 に答える