IOS / Xcode:将Web服务订阅源保存到核心数据中

时间:2015-02-10 01:19:00

标签: ios xcode web-services core-data

我有一个网络应用程序,想要从Web服务下载数据到核心数据,以便在我的IOS应用程序中显示。最终的目标是能够在离线的iOS应用程序上工作,然后与网站(如Facebook)同步,但现在我只是尝试将Web服务提要存储到核心数据和显示。虽然我意识到有一些库需要帮助,但我想在第一次迭代时本地完成它。我使用http://api.openweathermap.org/data/2.5/weather?q=London,uk作为json feed。

以下是正确的方法吗?

在IOS中创建具有与Json响应中的变量名称相同的属性名称的数据模型

在主视图控制器头文件(vc.h)中添加NSMutable Array属性以保存连接到storyboard的json字段的数据和出口属性

@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”];
        });
  }
}

//在Core Data中保存对象..我不知道如何做到这一点

//使用NSFetchedResults控制器创建方法从核心数据中提取数据并在表格视图中显示

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

1 个答案:

答案 0 :(得分:0)

另一种巧妙的方法是按照这篇文章中描述的那样做:Pull Website Data Easily iOS

我不知道这是否正是您正在寻找的,但您可以稍后将数组保存到核心数据中,或者只是按原样显示。