2012-03-16 2 views
1

Я загружаю plist через NSURLConnection в NSMutableData. После этого я хочу прочитать PLIST в NSMutableDictionary. Затем добавьте объекты в мой массив, чтобы отобразить их в виде таблицы. Но на данный момент я не знаю, как извлечь данные из NSMutableData в мой NSMutableDictionary. Если я сохраню данные локально как plist на iPhone в какой-то папке, а затем прочитаю plist в моем словаре, он работает. Но разве нет способа сделать это напрямую?NSMutableData Plist для NSMutableDictionary

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    receivedData = [[NSMutableData alloc] initWithData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ 

    NSData *data = [[NSMutableData alloc] initWithData:receivedData]; 

    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 


    NSDictionary *myDictionary = [unarchiver decodeObjectForKey:@"Beverage"]; 

    [unarchiver finishDecoding]; 

    beverageArray = [[NSMutableArray alloc] init]; 

    beverageArray = [myDictionary objectForKey:@"Beverage"]; 

    NSLog(@"%@", beverageArray); 

} 

Перед использованием NSURLConnection я использовал это, который работает:

- (void) makeDataBeverage { 

    beverageArray = [[NSMutableArray alloc] init]; 

    NSMutableDictionary *beverageDic = [[NSMutableDictionary alloc]initWithContentsOfURL:[NSURL URLWithString:NSLocalizedString(@"beverage", nil)]]; 

    beverageArray = [beverageDic objectForKey:@"Beverage"]; 

Теперь я хочу, чтобы то же самое с помощью NSURLConnection.

+0

Плохое форматирование кода, моя Немезида. Поэтому мы встречаемся снова ... Во всей серьезности, хотя, пожалуйста, работайте над форматированием своего кода, прежде чем отправлять сообщение, спасибо! –

+0

У вас есть шаблон для передачи данных? Это XML-документ? – Panagiotis

+0

Извините за плохой код .... только новичок ... данные, которые являются нагрузкой, являются plist со словарем и массивами – halloway4b

ответ

0

Предполагая, что у вас есть полные данные (*), вы захотите изучить класс NSPropertyListSerialization. Его метод +propertyListWithData:options:format:error: должен предоставить вам то, что вы ищете, и вы можете использовать параметр options, чтобы получить результаты как изменяемый словарь или массив.

(*) Похоже, что у вас есть полные данные, так как вы говорите, что можете записать его в файл, а затем прочитать его с помощью dictionaryWithContentsOfFile: или аналогичного, но это не похоже, что вы гарантированно получите его от кода, который вы указали. Вы создаете новые данные в -connection:didReceiveData:, но этот метод делегата можно вызвать несколько раз по мере поступления данных в куски. (Я предполагаю, что это просто произошло, чтобы получить все в одной части для вашего тестирования ... это может не всегда быть правдой, особенно на мобильном устройстве.) Вместо этого вы, вероятно, захотите создать пустые изменяемые данные при запуске своего NSURLConnection (или в -connection:didReceiveResponse:), добавьте его в -connection:didReceiveData: и проанализируйте его в -connectiondidFinishLoading:. Или даже лучше, поскольку анализатор свойств не может ничего делать с частичными данными, используйте новый +[NSURLConnection sendAsynchronousRequest:queue:completionHandler:], если вы ориентируетесь на iOS 5.0+.

+0

Спасибо, что помогли. Вы были правы, чтобы посмотреть на NSPropertyListSerialization. Я сделал это так, и все отлично. 'Ошибка NSError *; NSData * tempData = [[NSData alloc] initWithData: receivedData]; NSPropertyListFormat plistFormat; NSDictionary * temp = [NSPropertyListSerialization propertyListWithData: tempData options: NSPropertyListImmutable format: & plistFormat error: & error]; beverageArray = [temp objectForKey: @ "Beverage"]; ' – halloway4b

Смежные вопросы