NSMutableData Plist для NSMutableDictionary - PullRequest
1 голос
/ 16 марта 2012

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

- (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.1007 *

1 Ответ

0 голосов
/ 17 марта 2012

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

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

...