0

これが私のコードです。plistのコンテンツをテーブルに表示しようとしていますが、エラーが発生し続けます。私は一日中それをしていたので、私はおそらくかなり簡単なものを逃しています。私がビルドするときにテーブルが空である理由を皆さんが理解できることを願っています。

これが私のplistです(ヘッダーなし):

<array>
<dict>
    <key>word</key>
    <string>AWord1</string>
    <key>definition</key>
    <string>here is a definition</string>
    <key>partOfSpeech</key>
    <string>here is a part of speech</string>
</dict>
<dict>
    <key>word</key>
    <string>Bword1</string>
    <key>definition</key>
    <string>here is a definition</string>
    <key>partOfSpeech</key>
    <string>here is a part of speech</string>
</dict>
</array>
</plist>

編集:フォーマットミスのために終了タグが欠落していた-修正済み

わかった。これが私の新しいコードです。私はNSLogを実行し、plistに移動する前にバックアップすることにしました。だから、あなたが助けることができれば。代わりにこのデータをplistからプルすることをどのように提案しますか(データがplistにあると仮定します)

//Initialize the array.
listOfItems = [[NSMutableArray alloc] init];

NSArray *countriesToLiveInArray = [NSArray arrayWithObjects:@"Iceland", @"Greenland", @"Switzerland", @"Norway", @"New Zealand", @"Greece", @"Italy", @"Ireland", nil];
NSDictionary *countriesToLiveInDict = [NSDictionary dictionaryWithObject:countriesToLiveInArray forKey:@"Countries"];

NSArray *countriesLivedInArray = [NSArray arrayWithObjects:@"India", @"U.S.A", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", nil];
NSDictionary *countriesLivedInDict = [NSDictionary dictionaryWithObject:countriesLivedInArray forKey:@"Countries"];

[listOfItems addObject:countriesToLiveInDict];
[listOfItems addObject:countriesLivedInDict];

//Initialize the copy array.
copyListOfItems = [[NSMutableArray alloc] init];

//Set the title
self.navigationItem.title = @"Countries";

//Add the search bar
self.tableView.tableHeaderView = searchBar;
searchBar.autocorrectionType = UITextAutocorrectionTypeNo;

searching = NO;
letUserSelectRow = YES;

plistからのデータを解析するように実際に指示していないように感じます。私はそれを初期化しただけです。考え?

4

2 に答える 2

1

あなたのコードは非常に不完全なようです、それはplistとあまり関係がありません。ここにいくつかの問題があります

  • H2CO3とFogmeisterが指摘しているように、表示されているplistには終了</array>タグがありません(ただし、これは質問のタイプミスであると想定します)
  • 配列全体を辞書の単一のエントリにロードしますcountriesToLiveIn(キー「定義」に対して)
  • countriesToLiveIn配列内の単一のオブジェクトになりますlistOfItems
  • 配列を初期化しますcopyOfListItemsが、その後は何もしません

次に、テーブルが日付を取得している場所を示しません。

からの場合copyOfListItems、その配列は空です。:空のテーブル。

それがあなたからのものである場合、あなたはどういうわけか辞書listOfItemsを解析するでしょう、しかしあなたはその方法を示しません。countriesToLiveIn

それがplist配列から直接のものである場合countriesToLiveInArray、その欠落している</array>タグが手がかりになる可能性があります。また、配列に含まれている辞書を何らかの方法で解析する必要があります。そのコードを表示しないと、そこに何か問題がある可能性があります。

NSLogこれをさらに進めるために、データがオブジェクトにどの程度到達するかを調べるためにを多用することをお勧めします。それでも行き詰まっている場合は、おそらく結果を使って質問を拡大することができます。

アップデート

更新されたコードに続いて、私の最初の疑いは、URLに問題があったことです。

以前の編集では、これは疑わしい行です

NSMutableArray *wordListArray = [[NSMutableArray alloc] initWithContentsOfURL: [NSURL URLWithString:@"http://url.com/dictpPlist.plist"]];

その直後にNSLogを実行する必要があります。

NSLog (@"wordListArray %@", wordListArray);

ここでplistを取得していないことを確認します。少なくとも、コード内のこの時点まで問題を切り分けます。

次に、URLを質問する必要があります-それは正しいですか?plistはどのようにしてそこに到達しましたか?個別に確認できますか?ローカルファイルのURLですか、それともネットワークのURLですか。

ネットワークリソースにアクセスしている場合、これはおそらく問題です。これらのinitWithContentsOfURLメソッドは、実際にはローカルファイルシステムのURLでのみ使用する必要があります。たとえば、

initwithcontentsofurlメソッドは有害と見なされます。

NSURLConnection代わりに非同期で使用する必要があります。Appleはこれについても少し気難しいです

aURL:メソッドによって生成された配列の文字列表現を含むファイルの場所writeToURL:atomically:

これがあなたの問題であると仮定して、最初にローカルファイルシステムのplistで動作させてみませんか。

listOfItems配列からコードで1つ記述します。

- (void) createPlist
{
    NSFileManager* fManager = [NSFileManager defaultManager];
    NSError* error;
    NSURL* docsURL = [fManager URLForDirectory:NSDocumentDirectory 
                                          inDomain:NSUserDomainMask 
                                 appropriateForURL:nil 
                                            create:NO 
                                             error:&error];

    NSURL* plistURL = [docsURL URLByAppendingPathComponent:@"testlist.plist"];
    [listOfItems writeToURL:plistURL atomically:YES];
}

読み返して、機能することを確認してから、ネットワーク上で同じことを行う方法を整理します。

于 2013-02-28T13:42:32.047 に答える
-2

以下のコードを試してください

// Path to the plist (in the application bundle)
     NSString *path = [[NSBundle mainBundle] pathForResource:
    @"dictpPlist" ofType:@"plist"];

// Build the array from the plist  
     NSMutableArray *array2 = [[NSMutableArray alloc] initWithContentsOfFile:path];

// Show the string values  
    for (NSString *str in array2)
      NSLog(@"--%@", str);
于 2013-02-28T13:27:51.827 に答える