Я заполняю сборщик значениями из файла plist.
формат plist как ниже.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>type</key>
<array>
<string>AAAA</string>
<string>BBBBB</string>
<string>CCCCC</string>
</array>
</dict>
</plist>
В проекте, вызывающем этот словарь / массив для средства выбора, это прекрасно работает.
NSBundle *bundle = [NSBundle mainBundle];
NSString *plistPath = [bundle pathForResource:@"typecategory" ofType:@"plist"];
NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
self.typeCategorySettings = dictionary;
[dictionary release];
NSArray *typeComponents = [self.typeCategorySettings allKeys];
NSArray *sorted = [typeComponents sortedArrayUsingSelector:@selector(compare:)];
self.typeCategory = sorted;
NSString *selectedTypeCategory = [self.typeCategory objectAtIndex:0];
NSArray *array = [typeCategorySettings objectForKey:selectedTypeCategory];
self.typeValues = array;
Вызов self.typeValues, как показано ниже
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [self.typeValues count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [self.typeValues objectAtIndex:row];
}
Но, кроме того, я добавил новый modalViewcontroller, чтобы добавить больше значений для выбора.
С textField.text от modalviewcontroller
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [NSString stringWithFormat:@"%@/typecategory.plist", documentsDirectory];
NSLog(@"path: %@", path);
NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:path];
//self.typeCategorySettings = dictionary;
//[dictionary release];
NSArray *typeComponents = [dictionary allKeys];
NSArray *sorted = [typeComponents sortedArrayUsingSelector:@selector(compare:)];
//self.typeCategory = sorted;
NSString *selectedTypeCategory = [sorted objectAtIndex:0];
NSMutableArray *array = [dictionary objectForKey:selectedTypeCategory];
NSString *plistt = textField.text;
NSLog(@"path: %@", plistt);
[array addObject:plistt];
[array writeToFile:path atomically:YES];
Целью вышеописанного метода является добавление «n» числа новых строк / строковых элементов в одном массиве.
как показано ниже
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>type</key>
<array>
<string>AAAA</string>
<string>BBBBB</string>
<string>CCCCC</string>
<string>DDDDD</string>
<string>NNNNN</string>
</array>
</dict>
</plist>
Протестировано с симулятором и устройством. Но добавление новой строки в существующий массив не фиксируется в файле plist.
Консольный отчет здесь:
DataFile: ошибка открытия файла:
/var/mobile/Library/Keyboard/en_GB-dynamic-text.dat,
(В доступе отказано) 2011-03-03
22: 49: 05.028 TesApp [1562: 307] путь:
/var/mobile/Applications/05074277-7E4D-4BC0-9CFA-XXXXXXXX/Documents/typecategory.plist 2011-03-03 22: 49: 05.031
TesApp [1562: 307] путь: DDDDD
Любое предложение, чтобы решить этот plist добавление строки в массив? ... а также любое простое решение для сборщика. Возможность добавить значения на ходу. Либо из базовых данных, либо из списка.
Буду признателен за помощь.
С уважением
Devaski.