Чтение информации из Plist для использования в TableView - PullRequest
0 голосов
/ 02 мая 2011


Я проверил другие посты, но, похоже, не отвечает на мой вопрос, поэтому здесь я иду:)
У меня есть 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>001</key>
    <dict>
        <key>Name</key>
        <string>Name1</string>
        <key>Number</key>
        <string>001</string>
    </dict>
    <key>002</key>
    <dict>
        <key>Name</key>
        <string>Name2</string>
        <key>Number</key>
        <string>002</string>
    </dict>
</dict>
</plist>

Я пытаюсь преобразовать этот код в массив и использовать его для источника TableView.Тем не менее, даже если бы я видел другие посты, ни одна из них мне не помогла (что я вижу, это мой первый настоящий проект iOS, поэтому я не могу на 100% манипулировать их кодом).Я хочу, чтобы таблица создавалась из этого Plist, и, поскольку она будет содержать не менее 100 элементов (с добавлением еще большего количества элементов через Plist), я бы хотел, чтобы она была сгенерирована.
Однако главное, что яя пытаюсь сделать, это получить массив для получения информации от Key1, а затем Key2, Key3 ... как это было бы в следующем коде вручную (который я должен набрать вручную, и я буду добавлять дополнительную информацию, так чтоЯ хочу, чтобы он исходил из Plist):

NSDictionary *item1 = [[NSDictionary alloc] initWithObjectsAndKeys:
                          @"Name1", @"Name", @"001", @"Number", nil]; 
NSDictionary *item2 = [[NSDictionary alloc] initWithObjectsAndKeys:
                              @"Name2", @"Name", @"002", @"Number", nil];
NSDictionary *item3 = [[NSDictionary alloc] initWithObjectsAndKeys:
                              @"Name3", @"Name", @"003", @"Number", nil];

Одна вещь, которую я хотел бы, - это иметь возможность изменять порядок отображения таблицы (между числом и алфавитом), что я не думаю,это очень важно, но это то, что я хотел бы добавить, если я совершаю ошибку с чем-то, что не может быть сделано?
Спасибо за чтение,
Джозеф Даффи

Редактировать: Решено, но новая проблема, пожалуйста, прочитайте ниже. Теперь решено, спасибо! Спасибо за информацию, это было очень полезно!Однако, когда я поставил следующее:

- (void)viewDidLoad
{
    NSBundle *bundleLocation = [NSBundle mainBundle];
    NSString *arrayLocation = [bundleLocation pathForResource:@"plistname" ofType:@"plist"];
    NSArray *plistcontentsArray = [[NSArray alloc] initWithContentsOfFile:arrayLocation];
    self.pokemonNames = pokemonArray;

    [bundleLocation release];
    [plistArray release];

    [super viewDidLoad];
}

Все отлично работает.Но когда я добавляю [arrayLocation release];, он вылетает с "exc_bad_access".Есть идеи?:)

1 Ответ

1 голос
/ 02 мая 2011

Просто используйте элемент «массив» вместо элемента «dict» в вашем списке свойств. Например:

<?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">
<array>
    <dict>
        <key>Name</key>
        <string>Name1</string>
        <key>Number</key>
        <string>001</string>
    </dict>
    <dict>
        <key>Name</key>
        <string>Name2</string>
        <key>Number</key>
        <string>002</string>
    </dict>
</array>
</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">
<array>
    <string>Name1</string>
    <string>Name2</string>
</array>
</plist>

Чтобы загрузить массив в списке свойств, просто используйте следующее. (Изменение «Массива» на имя списка свойств и более чем вероятно использование переменной экземпляра для NSArray.)

NSBundle * mainBundle = [NSBundle mainBundle];
NSString * arrayLocation = [mainBundle pathForResource:@"Array" ofType:@"plist"];
NSArray * array = [[NSArray alloc] initWithContentsOfFile:arrayLocation];

и для извлечения информации из массива вы можете использовать:

NSString * name = [array objectAtIndex:0];

Что касается алфавитного порядка, вы можете найти здесь:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Collections/Articles/Arrays.html#//apple_ref/doc/uid/20000132-SW5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...