IOS/Xcode:将 Web 服务提要保存到核心数据中

Posted

技术标签:

【中文标题】IOS/Xcode:将 Web 服务提要保存到核心数据中【英文标题】:IOS/Xcode: Save Web Service Feed into Core Data 【发布时间】:2015-02-10 01:19:00 【问题描述】:

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

以下是正确的方法吗?

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

在主视图控制器标题 (vc.h) 中添加 NSMutable Array 属性以保存连接到情节提要的 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控制器创建方法,从核心数据中拉取数据并显示在表格视图中

感谢任何 cmets 的建议。我已经广泛搜索了一个好的开始到完成的方法来做到这一点,找不到一个好的教程或简单的步骤说明。我发现的一切要么非常简单,要么对库有很多依赖,因此非常复杂。

【问题讨论】:

//Save Object in Core Data 这是通过创建核心数据实体的实例然后在托管对象上下文上调用保存操作来完成的。不过,您可能需要小心重复记录。我看到像 Overcoat、Mantle 这样的库有一个“唯一”键属性,它可以帮助库知道哪个 JSON 属性是唯一键(通常是实体 ID)。 【参考方案1】:

另一种巧妙的方法是按照本文所述进行操作:Pull Website Data Easily iOS

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

【讨论】:

以上是关于IOS/Xcode:将 Web 服务提要保存到核心数据中的主要内容,如果未能解决你的问题,请参考以下文章

IOS/xcode:将核心数据从应用委托移动到模型类

ios8/xcode6.1:在情节提要中设置时在运行时忽略自定义字体

IOS/Xcode:故事板屏幕变黑

iOS9 Xcode 7 - 核心数据 - 避免重复对象

iOS Xcode - 编辑情节提要对象导致视图控制器场景复制另一个场景然后 Xcode 崩溃

带有情节提要的 presentViewController 显示黑色视图 iOS 7.1 xcode 5.1