2014-01-24 5 views
0

у меня есть этот метод здесь, который проходит через каждый раз, когда я нажимаю сохранить:как сохранить новый NSMutableDictionary в список свойств

-(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 свойства в указанный путь списка свойств. Но это, похоже, не случается однажды. Я перестраиваю приложение. Возможно, мой способ создания нового словарного объекта неверен. Может кто-нибудь объяснить, почему это не работает?

+0

Что вы думаете о себе? все пишут, но не знают о вашем пути. – Retro

+0

Как вы инициализировали свой изменяемый словарь? – yoninja

+0

'NSLog (@"% @,% @ ", self.userFoodDictionary, self.appDataPath);' показать результат журнала, пожалуйста. – KudoCC

ответ

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]; 
} 
+0

Должен ли я видеть изменения в моем файле plist? – Mutch95

+0

Вы должны быть после '[self.userFoodDictionary writeToFile: filePath atomically: YES];' – yoninja

+0

должен ли NSDictionary быть NSMutableDictionary? – Mutch95

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

+0

Как я возможно ли добавить объекты в plist? – Mutch95

+0

@ Mutch95 Вы должны сохранить файл в своем документе или в каталоге библиотеки вашего приложения. Вы можете получить путь к документу, как этот 'NSString * documentPath = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex: 0];' – KudoCC

+0

теперь мои значения возвращают 2014-01-24 16: 41: 27.167 Carbies [1550: 70b] (null), (null), когда я повторяю – Mutch95