web-dev-qa-db-ja.com

Plist(NSString)をNSDictionaryに解析します

したがって、(ファイルシステムからではなく)動的に取得するplist構造化文字列があります。この文字列をNSDictionaryに変換するにはどうすればよいですか。

NSDataに変換してからNSPropertyListSerializationを使用してNSDictionaryに変換しようとしましたが、NSDictionaryにアクセスしようとすると、「[NSCFString objectAtIndex:]:認識されないセレクターがインスタンス0x100539f40に送信されました」が返され、辞書が正常に作成されなかったことが示されます。

NSStringの例(つまり、plistデータ):

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
 <key>Key1</key> 
 <dict> 
  <key>Test1</key> 
  <false/> 
  <key>Key2</key> 
  <string>Value2</string> 
  <key>Key3</key> 
  <string>value3</string> 
 </dict> 
</dict> 
</plist> 

ありがとう!

26
christo16

プロパティリストのシリアル化 を参照してください。

NSData* plistData = [source dataUsingEncoding:NSUTF8StringEncoding];
NSString *error;
NSPropertyListFormat format;
NSDictionary* plist = [NSPropertyListSerialization propertyListWithData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
NSLog( @"plist is %@", plist );
if(!plist){
    NSLog(@"Error: %@",error);
    [error release];
}
72
Peter N Lewis

これを試して:

NSData * data = [yourString dataUsingEncoding:NSUTF8StringEncoding];

NSString *errorDesc = nil;
NSPropertyListFormat format;
NSDictionary * dict = (NSDictionary*)[NSPropertyListSerialization
                                      propertyListFromData:data
                                      mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                      format:&format
                                      errorDescription:&errorDesc];
12
Marco Mustapic

NSDataに変換してからNSPropertyListSerializationを使用してNSDictionaryに変換しようとしましたが、NSDictionaryにアクセスしようとすると、「[NSCFString objectAtIndex:]:認識されないセレクターがインスタンス0x100539f40に送信されました」が返され、辞書が正常に作成されなかったことが示されます。

いいえ、そのようなことは示されていません。それが示しているのは、文字列を配列として処理しようとしたことです。 plistのどこで配列を取得しようとしていたのか、配列を期待した場所に文字列があった理由、つまり、plistを誤って作成したかどうか(putting文字列を入力したかどうか)を判断する必要があります。配列を配置するつもりだった場合)、または配列を誤って調べている場合(文字列の存在は正しい、その後の配列の期待は間違っている)。

1
Peter Hosey