2

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 ファイルの 1 行に保存したいのですが、どうすればよいかわかりません。

あなたは私を導くことができますか?

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 をファイル (plist ではなく HTML ファイル) に書き込むだけです。

  4. 私は通常、メイン キューに html をロードしたくありません。dispatch_asyncこれをバックグラウンド キューで実行します。しかし、あなたが探しているものを正確に明確にするまで、私は遠くに行くことを躊躇します.

しかし、Web ページからデータを取得する方法を示して、正しい方向に導いてくれることを願っています。


個々の html ファイルをローカル ファイルに保存したい場合 (たとえばX.htmlXがゼロから始まるインデックス番号である場合)、次のようにすることができます。

// 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 に答える