2

我想将数据字符串(例如用于创建许多 url 的循环)放在 xcode 上的 plist 文件中。这是我的代码(循环)

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 文件的一行中,但我不知道该怎么办?

你能指导我吗?

4

2 回答 2

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];

几个想法:

  1. 根据有多少页面,我不确定我是否对将所有页面加载到 plist 中感到疯狂。我要么

    • 使用像 Core Data 这样的持久存储,这样我就不必将所有页面都保存在内存中,或者

    • 对 HTML 进行一些延迟加载(根据需要加载它))

  2. 另外,如果我要加载所有页面,考虑到这可能需要一点时间,我可能会有一个进度视图,我会根据我的进度进行更新,这样用户在下载时就不会看到冻结的屏幕正在进行中。

  3. 如果您只想检索单个 html 文件,那么将其存储在 plist 中可能没有意义。我只是将 html 写入文件(HTML 文件,而不是 plist)。

  4. 我通常不喜欢在主队列中加载 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];
    }
}];
于 2013-03-24T20:41:55.937 回答
0

尝试[b writeToFile:@"myFile.plist" atomically:YES];,但要确保数组中的所有数据都可以在 plist 中表示。

于 2013-03-24T20:22:20.487 回答