【问题标题】:RestKit with local XML带有本地 XML 的 RestKit
【发布时间】:2012-09-17 07:17:51
【问题描述】:

我使用 RestKit 从资源加载 XML 数据。这很完美,但现在我想改变我的整个程序来读取本地 XML 文件。我发现可以读取本地 xml 文件并通过 Google RestKit Group 中的 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 对象做同样的事情?

【问题讨论】:

    标签: objective-c xml restkit


    【解决方案1】:

    我找到了以下问题的解决方案。像魅力一样工作。

    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);
    }
    

    【讨论】:

      【解决方案2】:

      对于 Restkit 0.20,我使用这种方法:

      库.xml

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

      书.h

      #import <Foundation/Foundation.h>
      
      @interface Book : NSObject
      
      @property (nonatomic,strong) NSString * label;
      
      @end
      

      书.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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多