-1

データをロードしようとしているかなり大きな plist があります。以下に plist の例を示しますが、580 件のレコードがあるため、ここにすべてを配置することはできません。

<plist version="1.0">
    <array>
            <dict>
                    <key>Grave #</key>
                    <string></string>
                    <key>Last Name</key>
                    <string>?</string>
                    <key>First Name</key>
                    <string>Ada Lou daughter of</string>
                    <key>Dates</key>
                    <string>?-? Unable to read stone</string>
                    <key>Notes</key>
                    <string></string>
                    <key></key>
                    <string></string>
            </dict>
            <dict>
                    <key>Grave #</key>
                    <string></string>
                    <key>Last Name</key>
                    <string>?</string>
                    <key>First Name</key>
                    <string>Stone w/ Cherokee syllabry and also in english says: Here we rest</string>
                    <key>Dates</key>
                    <string></string>
                    <key>Notes</key>
                    <string></string>
                    <key></key>
                    <string></string>
            </dict>

.h ファイルに自分のプロパティがあります

@property (nonatomic, strong) NSDictionary *graves;

私の .m ファイルで合成:

@synthesize graves;

私のビューでファイルをロードするコードは次のとおりです。

NSString *file = [[NSBundle mainBundle] pathForResource:@"RossCemeteryList" ofType:@"plist"];

NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:file]) {
    NSLog(@"The file exists");
} else {
    NSLog(@"The file does not exist");
}

graves = [[NSDictionary alloc] initWithContentsOfFile:file];
NSLog(@"%i", [graves count]);

NSLog メッセージには、ファイルが見つかったことが示されています。2 番目の NSLog メッセージには行がありません。「NSLog (@"%@", Graves);」を使用してコンテンツの墓を吐き出すことができます。NULL を返します。

私は少し迷っています。どんな助けでも感謝します。

4

2 に答える 2

2

NSDictionary オブジェクトを作成し、その plist の内容から初期化しようとしていますが、その plist には実際にはルート オブジェクトとして NSArray が含まれています。NSDictionary を NSArray または NSMutableArray に変更する必要があります。

于 2013-07-29T21:35:41.597 に答える
1

まだ解決策を探しているかどうかはわかりませんが、このコードを使用すると、plist ファイルを読み込んでその内容のタイプを判別できるはずです。

//  load a Property List ("plist") file (fully-qualified path) into a generic object, if
//  it's available...
- ( NSObject * ) testLoadPListData: ( NSString * const ) plistPath

{

    //  load the file data into a raw data object...
    NSData * const data = [ NSData dataWithContentsOfFile: plistPath ];

    //  fields returned from property list creation...
    NSPropertyListFormat fmt = 0;
    NSError * err = nil;

    //  load the file data into a serialized property list object...
    NSPropertyListSerialization * plist = [ NSPropertyListSerialization propertyListWithData: data
                                                                                     options: NSPropertyListImmutable
                                                                                      format: &fmt
                                                                                       error: &err
                                          ];

    //  if there was an error creating the serialized object...
    NSString * const errorText = err ? [ err description ] : nil;
    if ( errorText )

        {

        //  log the error string...
        NSLog( @"error while reading data from file \"%@\": %@"
             , plistPath
             , errorText
             );

        }  // end error creating serialized object

#if defined( DEBUG )

    //////////////////////////////
    //                          //
    //  DEBUG PURPOSES ONLY...  //
    //                          //
    //////////////////////////////

    //  if this file is in a format that can be readily translated into one of our target data types...
    if (  plist )

        {

        //  if this property list file contains a dictionary...
        if ( [ plist isKindOfClass: [ NSDictionary class ] ] )

            {

            //  dump the contents of the dictionary to the debug output window...
            NSDictionary * const dict = ( NSDictionary * )( plist );
            __CCLOG( @"<Dictionary>%@\n</Dictionary>", dict );

            }  // end is dictionary plist file

        //  if this property list file contains an array...
        else if ( [ plist isKindOfClass: [ NSArray class ] ] )

            {

            //  dump the contents of the array to the debug output window...
            NSArray * const arr = ( NSArray * )( plist );
            __CCLOG( @"<Array>%@</Array>", arr );

            }  // end is array plist file

        }  // end valid file format

#endif  // defined( DEBUG )

    return plist;

}  //  end testLoadPListData
于 2014-06-22T04:28:42.380 に答える