我想在xcode上的plist文件中放置数据字符串(例如,循环用于创建多个url)。 这是我的代码(循环)
int count = 5;
NSString *a;
NSMutableArray *b = [[NSMutableArray alloc] initWithCapacity:count];
for (int i=1; i<= count; i++ ) {
a = [NSString stringWithFormat:@"http://192.168.1.114:81/book.php?page=%d",i];
[b addObject:a];
}
现在我想从.plist文件的一行中保存顶级代码中的任何页面,但我不知道我该怎么办?
你可以指导我吗?答案 0 :(得分:3)
我不确定你要拍的是什么,但是如果你试图从这些URL字符串中提取HTML,你可能会做类似的事情:
// build path for filename
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *filename = [docsPath stringByAppendingPathComponent:@"test.plist"];
// create array of html results
NSMutableArray *htmlResults = [NSMutableArray array];
for (NSString *urlString in b)
{
// get the html for this URL
NSString *html = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString] encoding:NSUTF8StringEncoding error:nil];
// add the html to our array (or zero length string if it failed)
if (html)
[htmlResults addObject:html];
else
[htmlResults addObject:@""];
}
// save the html results to plist
[htmlResults writeToFile:filename atomically:YES];
有几点想法:
根据有多少页面,我不确定我是否对将所有页面加载到plist中感到疯狂。我要么
使用像Core Data这样的持久存储,所以我不必将所有页面都保存在内存中,或者
对HTML进行一些延迟加载(根据需要加载))
此外,如果我要加载所有页面,假设它可能需要一点时间,我可能会有一个进度视图,我会根据我的进度更新,因此用户不会看到下载过程中冻结的屏幕。
如果您只想检索单个html文件,那么将其存储在plist中可能没有意义。我只是将html写入文件(HTML文件,而不是plist)。
我一般不想在主队列中加载html。我会在后台队列中执行dispatch_async
来执行此操作。但是我会犹豫不决,直到你准确地澄清你在寻找什么。
但希望这会指出您正确的方向,向您展示如何从网页中检索数据。
如果您想将单个html文件保存到某个本地文件(例如X.html
,其中X
是从零开始的索引号),您可以执行以下操作:
// identify the documents folder
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
// save the html results to local files
[b enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSString *html = [NSString stringWithContentsOfURL:[NSURL URLWithString:obj] encoding:NSUTF8StringEncoding error:nil];
if (html)
{
NSString *filename = [docsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.html", idx]];
[html writeToFile:filename atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
}];
答案 1 :(得分:0)
尝试[b writeToFile:@"myFile.plist" atomically:YES];
,但请确保数组中的所有数据都可以在plist中表示。