0

ここに、保存を押すたびに実行されるこのメソッドがあります。

-(void)setName:(NSString *)foodName andCarbs:(NSNumber *)carbAmount{
    [self.userFoodDictionary setObject:(NSString *)foodName forKey:(NSString *)foodName];
    NSString *value = [[NSString alloc] initWithFormat:@"%@ Value", foodName];
    [self.userFoodDictionary setObject:(NSNumber *)carbAmount forKey:(NSString *)value];
    [self.userFoodDictionary writeToFile:self.appDataPath atomically:YES];
}

userFoodDictionary私の理解では、最後の 2 行目で、指定したプロパティ リスト パスにプロパティを保存する必要があります。しかし、それは一度ではないようです。アプリケーションを再構築します。新しいディクショナリ オブジェクトを作成する私の方法が間違っている可能性があります。誰かがなぜこれが機能しないのか説明してもらえますか?

4

2 に答える 2

1

Plistに書き込む

- (NSString *)foodDataPlistFilePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"UserFoodData.plist"];

    return filePath;
}

...

-(void)setName:(NSString *)foodName andCarbs:(NSNumber *)carbAmount{
    [self.userFoodDictionary setObject:(NSString *)foodName forKey:(NSString *)foodName];
    NSString *value = [[NSString alloc] initWithFormat:@"%@ Value", foodName];
    [self.userFoodDictionary setObject:(NSNumber *)carbAmount forKey:(NSString *)value];
    NSString *filePath = [self foodDataPlistFilePath];
    [self.userFoodDictionary writeToFile:filePath atomically:YES];
}

可変辞書を初期化します。

NSString *filePath = [self foodDataPlistFilePath];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:filePath];
self.userFoodDictionary = [[NSMutableDictionary alloc] init];
if(fileExists){
    NSDictionary *foodData = [NSDictionary dictionaryWithContentsOfFile:filePath];
    [_userFoodDictionary setDictionary:foodData];
}
于 2014-01-24T06:52:07.850 に答える
0

バンドル内のファイルを変更することはできません。

コメントで言ったように、self.appDataPath を初期化します。

NSString *appDataPath = [[NSBundle mainBundle] pathForResource:@"UserFoodData" ofType:@"plist"];

バンドルにあるパスにファイルを保存します。

バンドル内の plist ファイルを変更する場合は、ファイルをアプリのドキュメントに保存できます。

ドキュメント パスは次の方法で取得できます。

NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

次に、それをファイル名と組み合わせて、filePath.

NSString * filePath = [documentPath stringByAppendingPathComponent:@"UserFoodData.plist"];

最後に、保存できます:

[self.userFoodDictionary writeToFile:filePath atomically:YES];

于 2014-01-24T06:37:07.163 に答える