如何在.plist文件中添加数据字符串?

时间:2013-03-24 20:15:22

标签: ios objective-c xcode plist

我想在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文件的一行中保存顶级代码中的任何页面,但我不知道我该怎么办?

你可以指导我吗?

2 个答案:

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

有几点想法:

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

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

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

  2. 此外,如果我要加载所有页面,假设它可能需要一点时间,我可能会有一个进度视图,我会根据我的进度更新,因此用户不会看到下载过程中冻结的屏幕。

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

  4. 我一般不想在主队列中加载html。我会在后台队列中执行dispatch_async来执行此操作。但是我会犹豫不决,直到你准确地澄清你在寻找什么。

  5. 但希望这会指出您正确的方向,向您展示如何从网页中检索数据。


    如果您想将单个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中表示。