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