NSPropertyListSerialization Не удается установить строку изображения для подробного представления в табличном представлении (iOS) - PullRequest
0 голосов
/ 28 ноября 2011

У меня проблемы с удержанием содержимого массива при просмотре таблицы.Я имею в виду, что у меня есть PList, из которого я пытаюсь нарисовать данные для подробного представления, когда я щелкаю строку в табличном представлении.Вот что я имею в виду ViewDidLoad:

NSString *myfile = [[NSBundle mainBundle] pathForResource:@"MillersDeals" ofType:@"plist"];
NSError *error;
NSData *data = [NSData dataWithContentsOfFile:myfile options:0 error:&error];
self.dealsArray = [NSPropertyListSerialization propertyListWithData:data                                                            options:NSPropertyListMutableContainers format:NULL error:&error];
NSLog(@"%@", self.dealsArray);

Теперь я никогда не использовал NSPropertyListSerialization до тех пор, пока мне не предложили это как ответ на вопрос.Я не уверен, создает ли он целый набор различных проблем или его необходимо преобразовать обратно в словарь или массив, прежде чем я смогу использовать информацию внутри.Он распечатывает мой Plist хорошо, когда я NSLog это оба раза.в методе didSelectRowAtIndexPath, который я написал (я пытаюсь передать «изображение» из PList в строку изображения, настроенную в подробном представлении):

DealsDetailViewController *dealsDetail = [[DealsDetailViewController alloc]initWithNibName:@"DealsDetailViewController" bundle:nil];
NSLog(@"%@", dealsArray);
dealsDetail.petImageString = [[NSString alloc]initWithString:[[[dealsArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] objectForKey:@"Image"]];

Ошибка на сделки dealDetailОбъявление .petImageString.Это неправильный тип данных, который я установил для dealArray?


Образец 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>
    <dict>
        <key>Description</key>
        <string>Here&apos;s the deal</string>
        <key>Image</key>
        <string>Frito-Lays-Jobs.png</string>
        <key>Name</key>
        <string>Frito-Lays</string>
        <key>Thumbnail</key>
        <string>dollars.png</string>
    </dict>
    <dict>
        <key>Description</key>
        <string>Here&apos;s the deal 2</string>
        <key>Image</key>
        <string>Frito-Lays-Jobs.png</string>
        <key>Name</key>
        <string>Frito-Lays 2</string>
        <key>Thumbnail</key>
        <string>dollars.png</string>
    </dict>
</array>

Это просто пример (вот почему некоторыеэлементов одинаковы).

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Этот список, который вы показали, является массивом словарей, а не массивом словарей.Так что-то вроде этого должно работать в вашем didSelectRowAtIndexPath:

DealsDetailViewController *dealsDetail = [[DealsDetailViewController alloc]initWithNibName:@"DealsDetailViewController" bundle:nil];

dealsDetail.petImageString = [[self.dealsArray objectAtIndex:indexPath.row] objectForKey:@"Image"];
1 голос
/ 28 ноября 2011

Просто наблюдение, но в первом фрагменте кода вы устанавливаете 'dealArray', тогда как во втором фрагменте кода вы пытаетесь получить доступ к информации в 'dataArray'. В какой момент содержимое «dealArray» анализируется или передается в «dataArray»? Возможно, вы устанавливаете и / или обращаетесь к неправильной структуре данных?

...