2015-02-10 120 views
0

我有一个Web应用程序,并希望将数据从Web服务下载到核心数据以显示在我的IOS应用程序中。最终目标是能够离线处理iOS应用程序,然后与网站(如Facebook)同步,但现在我只是试图将Web服务订阅源存储到核心数据和显示中。虽然我意识到有些图书馆可以提供帮助,但我希望在本地进行第一次迭代。我使用http://api.openweathermap.org/data/2.5/weather?q=London,uk作为json feed。IOS/Xcode:将Web服务馈送保存到核心数据中

以下是正确的路要走吗?

创建具有相同的属性名称作为JSON响应

在主视图控制器报头(vc.h)添加NSMutable Array属性保持为有线连接到故事板

JSON字段数据和出口属性的变量名在IOS数据模型
@property (nonatomic, strong) NSMutableArray *weatherData; 
@property (weak, nonatomic) IBOutlet UILabel *temp; 
@property (weak, nonatomic) IBOutlet UILabel *humidity; 

在VC来源,综合性和viewDidLoad中使用NSSession下载数据

- (void)viewDidLoad { 
    [super viewDidLoad]; 

//1 
    NSString *dataUrl = [NSString stringWithFormat:@"http://api.openweathermap.org/data/2.5/weather?q=London,uk]; 
    NSURL *url = [NSURL URLWithString:dataUrl]; 

    // 2 
    NSURLSessionDataTask *downloadTask = [[NSURLSession sharedSession] 
    dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 

     // could add error checking here. 
// 3 
    [downloadTask setTaskDescription:@"weatherDownload"]; 
    [downloadTask resume]; 

     // 4: Handle response here 
     [self processResponseUsingData:data]; 
    }];  
} 
#pragma mark - Private 

// Helper method 
- (void)processResponseUsingData:(NSData*)data { 
    NSError *parseJsonError = nil; 

    NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data 
                  options:NSJSONReadingAllowFragments error:&parseJsonError]; 
    if (!parseJsonError) { 
    NSLog(@"json data = %@", jsonDict); 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      self.temp.text = jsonDict[@“temp”]; 
      self.humidity.text = jsonDict[@“humidity”]; 
     }); 
    } 
} 

//保存在核心Data..I对象不知道如何做到这一点

//使用NSFetchedResults控制器拉从核心数据和显示数据表视图

感谢您的任何意见建议创建方法。我已经搜索了很多很好的开始,完成这个任务的方式找不到一个好的教程或简单的步骤采取的步骤。我发现的一切都非常简单,或者对库有很多依赖,因此非常复杂。

+0

'//保存核心数据中的对象'这是通过创建您的核心数据实体的实例,然后在您的托管对象上下文中调用保存操作来完成的。尽管如此,您可能需要小心重复记录。我发现像Overcoat,Mantle这样的库有一个“唯一”的关键属性,可以帮助库知道哪个JSON属性是唯一键(通常是实体ID)。 – Zhang 2015-02-10 09:31:32

回答

0

另一种巧妙的方法是在这篇文章中描述的事情:Pull Website Data Easily iOS

我不知道这是不是你在寻找什么,但你可以在阵列后保存到核心数据,或只按原样显示。