Так что в моем last question я попросил совета по сохранению/загрузке из файла. Совет Plist был довольно впечатляющим, но, конечно, мне пришлось столкнуться с какой-то проблемой. Я уже заполнял контроллеры TableView> DetailView с помощью plist. Теперь мне нужно как-то сохранить мои данные (с parse.com). Вот мой текущий PLIST, я наполнил его вручную и для простоты (пожалуйста, не убивай меня) я сделал все детали строки:Добавление новых элементов для программирования программно [Обновлено]
<plist version="1.0">
<dict>
<key>orderID</key>
<array>
<string>idKMVX956</string>
<string>idEWUQ321</string>
</array>
<key>orderdate</key>
<array>
<string>28.06.2015</string>
<string>26.06.2015</string>
</array>
<key>match</key>
<array>
<string>Team 3 vs Team 4</string>
<string>Team 1 vs Team 2</string>
</array>
<key>date</key>
<array>
<string>20.06.2015</string>
<string>20.06.2015</string>
</array>
<key>sector</key>
<array>
<string>2</string>
<string>1</string>
</array>
<key>seat</key>
<array>
<string>R2S75</string>
<string>R1S1</string>
</array>
<key>price</key>
<array>
<string>120</string>
<string>60</string>
</array>
</dict>
</plist>
Теперь мой вопрос - как добавить новый порядок в этом PLIST. Просто ради тестирования я написал этот метод:
- (void)saveToPlist
{
NSString *matchname = @"Team 5 vs Team 6";
NSString *orderHistoryFile = [[NSBundle mainBundle] pathForResource:@"OrderHistory" ofType:@"plist"];
orders = [[NSMutableDictionary alloc] initWithContentsOfFile:orderHistoryFile];
match = [orders objectForKey:@"match"];
NSLog(@"matches: %@", match);
[match addObject:matchname];
NSLog(@"addedTeam; %@", match);
[match writeToFile:orderHistoryFile atomically:YES];
}
Но в то время как второй NSLog показывает, что на самом деле линия «Команда 5 против Team 6» был добавлен в массив - никаких изменений не отображаются в Plist файле и не появляются на Tableview. Любые идеи почему?
@Update хорошо, я вижу, где моя ошибка была с writetofile. Однако теперь после выполнения этого метода - он работает один раз, и я могу видеть детали. Тогда я больше не могу загружать данные, и таблица не заполняется. Зачем? Update2 Так что я не могу писать в своем каталоге пакетов (для консультации). Это заставило меня попытаться переместить весь процесс в документы. Вот код, я написал:
- (void)viewDidLoad {
[super viewDidLoad];
NSString *filePath = [[self fileDirectory] stringByAppendingString:@"OrderHistory.plist"];
if (![[NSFileManager defaultManager]fileExistsAtPath:filePath]){
[[NSFileManager defaultManager] copyItemAtPath:[[NSBundle mainBundle]pathForResource:@"OrderHistory" ofType:@"plist"] toPath:filePath error:nil];
}
orders = [[NSDictionary alloc] initWithContentsOfFile:filePath];
orderId = [orders objectForKey:@"orderID"];
NSLog(@"count orders: %d", [orderId count]);
}
- (NSString *)fileDirectory{
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
}
Теперь мой NSLog считая вещи выходных 0. Все отлично работает с каталогами расслоения, поэтому я подозреваю, что файл еще не создан в документах. Где моя ошибка?
Ваша ошибка в строке: '[[self fileDirectory] stringByAppendingString: @" OrderHistory.plist "];' it должно быть '-stringByAppendingPathComponent', когда вы добавляете его как строку, вы пропустите'/', который имеет значение для directoryPath – 0yeoj
Ок, я просто проснулся, и теперь все ясно. Спасибо за помощь ребята! – gradle
Можете ли вы поделиться с нами ответом? – 0yeoj