NSMutableData的NSMutableData Plist

时间:2012-03-16 17:51:23

标签: iphone nsurlconnection nsdata

我通过NSURLConnection将一个plist加载到NSMutableData中。 完成之后,我想将PLIST读入NSMutableDictionary。 然后将对象添加到我的数组中以在tableview中显示它们。 但目前我不知道如何将数据从NSMutableData提取到我的NSMutableDictionary中。 如果我将数据本地保存为某些文件夹中的iPhone上的plist,然后将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。

1 个答案:

答案 0 :(得分:0)

假设您拥有完整的数据(*),您将需要查看NSPropertyListSerialization类。它的+propertyListWithData:options:format:error:方法可以为您提供所需的内容,您可以使用options参数将结果作为可变字典或数组。

(*)听起来你有完整的数据,因为你说你可以将它写入文件,然后使用dictionaryWithContentsOfFile:或类似文件阅读,但它看起来不像你有保证从您显示的代码中获取它。您正在-connection:didReceiveData:中创建新数据,但是当数据到达时,可以多次调用该委托方法。 (我猜它恰好是为了你的测试而一次性到达所有...这可能并非总是如此,尤其是在移动设备上。)相反,你可能想要在启动时创建一个空的可变数据{ {1}}(或在NSURLConnection)中-connection:didReceiveResponse:附加{}},并在-connection:didReceiveData:中解析它。或者甚至更好,因为属性列表解析器无论如何都无法对部分数据执行任何操作,如果您的目标是iOS 5.0 +,请使用新的-connectiondidFinishLoading: