从 URL 下载 plist 并将其解析为 NSMutableDictionary?

Posted

技术标签:

【中文标题】从 URL 下载 plist 并将其解析为 NSMutableDictionary?【英文标题】:Download a plist from URL and parse it to a NSMutableDictionary? 【发布时间】:2010-11-12 07:57:39 【问题描述】:

大家好~

这就是我从 URL 下载 plist 的方式

NSURLRequest *theRequest=[NSURLRequest requestWithURL:setDefaultPwdAndSnURL                                              cachePolicy:NSURLRequestUseProtocolCachePolicy
                         timeoutInterval:60.0];
NSData    *returnData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:nil error:nil];
NSString *listFile = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

[listFile dataUsingEncoding:NSUTF8StringEncoding];
NSArray *plistData = [listFile propertyList];

这就是我得到的结果

plistdata is(
        
        sn = 1;
        pwd = 123;
    
)

我想把它保存到 NSMutableDictionary

NSArray *paths      = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *docPath    = [paths objectAtIndex:0];
 NSString *filePath   = [docPath stringByAppendingPathComponent:@"DevicePassword.plist"];
 NSMutableDictionary *dictread  = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

 NSMutableDictionary *device_serialnumber = [NSMutableDictionary dictionaryWithObject:[[plistData objectAtIndex:0]valueForKey:@"sn"]
                      forKey:@"serial_number"];

 NSMutableDictionary *device_password = [NSMutableDictionary dictionaryWithObject:[[plistData objectAtIndex:0]  valueForKey:@"pwd"]
                   forKey:@"password"];
 [dictread addEntriesFromDictionary:device_serialnumber];
 [dictread addEntriesFromDictionary:device_password];               
 [dictread writeToFile:filePath atomically:YES];

但我Log(@"dictread is :%@",dictread);

得到 dictread : (NULL)

.......所以我解析一个空的东西来听写????

请帮我解决这个问题....@_@

非常感谢~

注意:

我改变了一些初始化值并记录下来检查

NSMutableDictionary *device_serialnumber = [NSMutableDictionary dictionaryWithObject:@"123"
                      forKey:@"serial_number"];

 NSMutableDictionary *device_password = [NSMutableDictionary dictionaryWithObject:@"456"
                   forKey:@"password"];

我有两个字典“device_serialnumber”和“device_password”

但“dictread”仍然(NULL)

我是否给了错误的函数来添加对象????

【问题讨论】:

【参考方案1】:

dictread 不应使用 initWithContentsOfFile: 进行初始化,因为该文件尚不存在。如果文件有错误(无法将其作为字典读取)或文件不存在,这将为 dictread 返回 nil。请尝试使用此初始化程序。

NSMutableDictionary *dictread  = [[NSMutableDictionary alloc] initWithCapacity:[plistdata count]];

【讨论】:

我添加更多测试结果并投票给你的答案,请检查它〜【参考方案2】:

你也可以说:

[[plistData objectAtIndex:0] writeToFile:filePath atomically:YES];

不过,这会阻止您更改键的名称。

【讨论】:

以上是关于从 URL 下载 plist 并将其解析为 NSMutableDictionary?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Flutter 中的 URL 下载文件并将其保存在 iOS 共享文件夹中?

Java解析plist文件

网络爬虫

从 URL 下载文件并将其放在 iPhone 的 Resource 文件夹中

C# http-get url JSON 数据并将其解析为文本..?

如何从 URL 下载文件并将其保存在 Rails 中?