iPhone Plist для NSDictionary показывает черный экран - PullRequest
0 голосов
/ 08 мая 2011

Я занимаюсь разработкой приложения для iphone, я собираюсь получить список с веб-сервера и показать результаты в виде таблицы.

У меня возникла проблема при попытке десериализации списка.Следующий код компилируется, но во время выполнения экран симулятора iphone остается черным, мне кажется, что представление никогда не загружается и сообщения NSLog не отображаются в консоли.С другой стороны, если я отлаживаю, сообщения действительно печатаются в консоли, но представление не появляется, экран остается черным:

- (void)viewDidLoad {


NSData *data = [@"<?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>count</key><array><integer>5</integer></array><key>username</key><array><string>johnsmith</string></array></dict></plist>" dataUsingEncoding:NSUTF8StringEncoding];


NSString *error = nil;

NSPropertyListFormat *format;

NSMutableDictionary *plist = [NSPropertyListSerialization propertyListFromData:data 
                                 mutabilityOption:0 
                                        format: format
                                 errorDescription:&error];



if (!plist) {  
    NSLog(@"Error reading plist from file, error = '%s'", [error UTF8String]);  
    [error release];  
}  else {

    NSLog(@"Groovy");
    NSLog(@"Count: %d",[plist count]);
    NSLog(@"Username %@", [plist objectForKey:@"username"]);
    NSLog(@"Count %@", [plist objectForKey:@"count"]);
    //[plist retain];

}


//[plist dealloc];


[super viewDidLoad];
}

Я исследовал, и они говорят, что NSPropertyListSerialization утечки памятиЯ не уверен, что это мой случай.Если вы хотите попробовать этот код, я просто создал приложение на основе iphone view и вставил код в (void) метод viewDidLoad.

Любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 08 мая 2011

Измените свой код следующим образом:

NSPropertyListFormat format;

NSMutableDictionary *plist = [NSPropertyListSerialization propertyListFromData:data 
                                                              mutabilityOption:0 
                                                                        format:&format
                                                              errorDescription:&error];

т.е. удалите * перед первым format и добавьте & ко второму

NSPropertyListFormat не является объектом, это перечисление, и propertyListFromData: mutabilityOption:format:errorDescription: хочет указатель на экземпляр NSPropertyListFormat.

Вы передавали неинициализированный указатель, и метод пытался записать этот «случайный» адрес. Которые приводят к краху.

...