0

RestKitを使用してリソースからXMLデータをロードしました。これは完璧に機能しましたが、プログラム全体を変更してローカルXMLファイルを読み取るようにします。ローカルのxmlファイルを読み取り、GoogleRestKitグループのRestKitを介して解析する可能性を見つけました。

NSString *string = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"testing" ofType:@"xml"] encoding:NSUTF8StringEncoding error:nil]; 
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeXML]; 
id result = [parser objectFromString:string error:nil]; 
NSLog(@"%@",[[[[result objectForKey:@"sample"] objectForKey:@"nested"] objectForKey:@"tags" ] description]); 

しかし、今度はこのオブジェクトをマッピングとともにロードしたいと思います。サーバーからロードする私の古いコード:

RKObjectManager *objectManager = [RKObjectManager sharedManager];
RKURL *URL = [RKURL URLWithBaseURL:[objectManager baseURL] resourcePath:[xmlFile path] queryParameters:nil];

[objectManager.mappingProvider setMapping:myMapping forKeyPath:myKeyPath];

[objectManager loadObjectsAtResourcePath:[NSString stringWithFormat:@"%@", [URL resourcePath]] usingBlock:^(RKObjectLoader *loader) {
    loader.delegate = self;
}];

その後、RestKitのdidLoadObjectsデリゲートにマップされたオブジェクトを取得します。ローカルのxmlオブジェクトに対して同じことを行うにはどうすればよいですか?

4

2 に答える 2

0

私はこの問題に対して次の解決策を見つけました。チャームのように機能します。

RKObjectMappingProvider* mappingProvider = [RKObjectManager sharedManager].mappingProvider;
RKObjectMapper* mapper = [RKObjectMapper mapperWithObject:parsedData mappingProvider:mappingProvider];
RKObjectMappingResult* result = [mapper performMapping];
if (result) {

    NSArray *resultArray = result.asCollection;

    MyMappingClass *object = [resultArray lastObject];
    NSLog(@"My Object: %@", object);
}
于 2012-09-17T14:52:26.440 に答える
0

Restkit 0.20の場合、次の方法を使用します。

library.xml

<?xml version="1.0" encoding="UTF-8"?>
<library>
    <bookname>azeaze</bookname>
    <bookname>qdd</bookname>
    <bookname>vvef</bookname>
    <bookname>ytrtefc</bookname>
</library>

Book.h

#import <Foundation/Foundation.h>

@interface Book : NSObject

@property (nonatomic,strong) NSString * label;

@end

Book.m

#import "Book.h"

@implementation Book

@end

このXMLファイルを使用してNSDictionaryを作成します。このために、XMLReaderを使用します。

#import "XMLReader.h"

[...]

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Book class]];
[mapping addAttributeMappingsFromDictionary:@{@"bookname": @"label",}];

NSString *pathToDataFile = [[NSBundle mainBundle] pathForResource:@"library"
                                                           ofType:@"xml"];

NSError *error;

NSString* contents = [NSString stringWithContentsOfFile:pathToDataFile
                                               encoding:NSUTF8StringEncoding
                                                  error:&error];

NSData* xmlData = [contents dataUsingEncoding:NSUTF8StringEncoding];

NSError *parseError = nil;

NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLData:xmlData
                                                        error:&parseError];

NSDictionary *mappingsDictionary = @{ @"library": mapping };

RKMapperOperation *mapper = [[RKMapperOperation alloc] initWithRepresentation:xmlDictionary
                                                           mappingsDictionary:mappingsDictionary];

NSError *mappingError = nil;

BOOL isMapped = [mapper execute:&mappingError];

if (isMapped && !mappingError) {
    NSLog(@"SUCCESS : %@",[mapper mappingResult]);
} else {
    NSLog(@"FAIL : %@",mappingError);
}
于 2013-07-29T12:07:21.700 に答える