26

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

NSData を変換してから、NSPropertyListSerialization を使用して NSDictionary に変換しようとしましたが、NSDictionary にアクセスしようとすると、「[NSCFString objectAtIndex:]: unrecognized selector sent to instance 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> 

ありがとう!

4

3 に答える 3

73

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

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];
}
于 2009-07-02T03:44:07.727 に答える
13

これを試して:

NSData * data = [yourString dataUsingEncoding:NSUTF8StringEncoding];

NSString *errorDesc = nil;
NSPropertyListFormat format;
NSDictionary * dict = (NSDictionary*)[NSPropertyListSerialization
                                      propertyListFromData:data
                                      mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                      format:&format
                                      errorDescription:&errorDesc];
于 2009-07-02T03:36:30.397 に答える
1

NSData を変換してから、NSPropertyListSerialization を使用して NSDictionary に変換しようとしましたが、NSDictionary にアクセスしようとすると、「[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x100539f40」が返され、辞書が正常に作成されなかったことを示しています。

いいえ、そのようなことはありません。表示されるのは、文字列を配列として扱おうとしたことです。配列を取得しようとしていた plist の場所と、配列が必要な場所に文字列があった理由を特定する必要があります。 ) またはそれを正しく調べていない (文字列の存在は正しいが、その後の配列の期待は間違っている)。

于 2012-01-20T05:39:50.803 に答える