plistからの読書

私はplistから読む方法を学ぼうとしています...私は単純なケースです。より一般的なデータの場合は、アドバイスにも感謝しますが、実際には1つの整数を読みたいだけです。 plistにはItem0 - Arrayがあり、そのItem 0の下には数字があります。これは私がこれを読もうとしているところです。

plistArray = [[NSArray alloc] initWithContentsOfURL:[NSURL      URLWithString:@"http://www.website.com/count.plist"]];


//count = [[plistArray objectAtIndex:0]];
count=(int)[plistArray objectAtIndex:0];
NSLog(@"array %@\n",plistArray);

NSLog(@"count %i\n",count);

これはplist xmlです:

<?xml version="1.0" encoding="UTF-8"?> 

; 
     
        Item0 
         
            12 
         
     

0
それは...カウントはゼロで、配列内の配列はログにはありません。
追加された 著者 Cherr Skees,
<�?xml version = "1.0" encoding = "UTF-8"?> <�!DOCTYPE plist PUBLIC " - //Apple//DTD PLIST 1.0//EN" " apple.com/DTDs/PropertyList-1.0.dtd "&gt;; /item>
追加された 著者 Cherr Skees,
urlはうまく印刷されます...あなたが言ったように、それは私がplistをどのように扱っているかで何かでなければなりません。私は上にそれを貼り付けた...それはちょっと乱雑に見えますが、それほど多くはありません。助けてくれてありがとう。
追加された 著者 Cherr Skees,
配列がnilを出力する場合、urlが悪いかplist形式が間違っています。 NSArray alloc 行の前に別の行(たとえば、 NSURL * url = [NSURL URLWithString ... )でNSURLを作成し、 url >は出ない。 URLがOKならplist xmlを投稿してください。また、NSArraysにはオブジェクトが含まれているため、 count の割り当てが間違っています(intはプリミティブ型)。最初の項目が整数の場合、NSNumberオブジェクトとなりますので、 count = [(NSNumber *)[plistArray objectAtIndex:0] intValue]; を実行する必要があります。
追加された 著者 Anna,

3 答え

私はplistをどのように作成しているのか分かりませんが、NSArrayではなくNSArrayを保存していると思います。

plist内のデータの構造は、ルートオブジェクトが1つのキーと値のペアを含む辞書(dict)であることを示しています。キーは "Item0"で、値はあなたが探しているNSArrayです。

これを試して:

plistDict = [[NSDictionary alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.website.com/count.plist"]];
NSArray * plistArray = [plistDict objectForKey:@"Item0"];
NSLog(@"array %@", plistArray);
1
追加された
お手伝いありがとう...
追加された 著者 Cherr Skees,

plistには2つの問題があります。

  • the ; in front of the tag should not be there
  • the array you're trying to read in your code is inside a dictionary in the plist (the array is not the outermost element)

まず、セミコロンを削除します。

Next, either update the plist to contain only the element or update the code to first read the and then take the NSArray from the dictionary:

NSDictionary *plistDict = [NSDictionary dictionaryWithContentsOfURL:url];

NSArray *plistArray = [plistDict objectForKey:@"Item0"];

int count = [(NSNumber *)[plistArray objectAtIndex:0] intValue];
1
追加された

あなたのplistは配列ではなくルートオブジェクトとして辞書を持っています。 URLの内容を含むNSDictionaryを作成する必要があります。これは配列(キーItem0用)を含み、 this 配列の最初のオブジェクトは整数を保持するNSNumberになります。

1
追加された