Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 下载数据,创建核心数据对象,然后使用这些对象发出下一个请求_Ios_Core Data - Fatal编程技术网

Ios 下载数据,创建核心数据对象,然后使用这些对象发出下一个请求

Ios 下载数据,创建核心数据对象,然后使用这些对象发出下一个请求,ios,core-data,Ios,Core Data,对于涉及多个网络请求的问题,我正在努力想出一个优雅的解决方案。如果您需要比所提供的更多的信息,请随时询问 我需要从服务器下载数据,从中创建核心数据对象,然后使用这些对象中的信息下载下一组数据。因此,我正在跨越一个层次结构 例如: 我向服务器发出第一个请求,并下拉由4个对象(北、南、东、西)组成的区域。我正在将这些保存到核心数据 完成后(不确定跟踪这一点的最佳方法),我需要对区域实体执行一个获取请求,以获取这4个对象。每个地区都包含一些我需要从服务器请求的县。因此,我循环遍历各个区域,并为每个区

对于涉及多个网络请求的问题,我正在努力想出一个优雅的解决方案。如果您需要比所提供的更多的信息,请随时询问

我需要从服务器下载数据,从中创建核心数据对象,然后使用这些对象中的信息下载下一组数据。因此,我正在跨越一个层次结构

例如:

  • 我向服务器发出第一个请求,并下拉由4个对象(北、南、东、西)组成的区域。我正在将这些保存到核心数据

  • 完成后(不确定跟踪这一点的最佳方法),我需要对区域实体执行一个获取请求,以获取这4个对象。每个地区都包含一些我需要从服务器请求的县。因此,我循环遍历各个区域,并为每个区域发出网络请求

  • 我循环遍历每个返回的字典(每个地区一个字典)来创建每个县

以下是我下载地区和县的代码:

    + (void)downloadRegions
    {
        NSString *search = @"organisation";

        NetworkHandler *networkHandler = [[NetworkHandler alloc] init];
       [networkHandler downloadData:search];
    }

    + (void)downloadCounty
    {
       NSManagedObjectContext *context = [DatabaseHandler sharedHandler].managedObjectContext;
       NSFetchRequest *request = [[NSFetchRequest alloc] init];

       NSEntityDescription *entity = [NSEntityDescription entityForName:@"Region" inManagedObjectContext:context];
       [request setEntity:entity];

        //NSPredicate *searchFilter = [NSPredicate predicateWithFormat:@"attribute = %@", searchingFor];
       NSError *error = nil;
       NSArray *results = [context executeFetchRequest:request error:&error];
       NSLog(@"%@", results);

       NSString *search = @"organisation?code=";

       for (Region *region in results) {
            NSString *s = [search stringByAppendingString:[NSString stringWithFormat:@"%@", region.code]];
            NetworkHandler *networkHandler = [[NetworkHandler alloc] init];
            [networkHandler downloadData:s];
       }
    }  
上述两种方法都调用:

- (void)downloadData:(NSString *)searchUrl
{
    NSString *apiURL = [kBaseURL stringByAppendingPathComponent:@"api"];
    NSString *finalURL = [apiURL stringByAppendingPathComponent:searchUrl];

    self.dataTask = [self.session dataTaskWithURL:[NSURL URLWithString:finalURL]
                                             completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

                                                 NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

                                                 //self.jsonData[searchUrl] = json;

                                                 [self createObjectInDatabase:json andSearchURL:searchUrl];

                                                 NSLog(@"This has been reached");
                                             }];

    [self.dataTask resume];
}

- (void)createObjectInDatabase:(id)data andSearchURL:(NSString *)searchURL
{
    if ([searchURL isEqual:@"organisation"]) {
        [Region createNewRegionWithData:data inManagedObjectContext:[DatabaseHandler sharedHandler].managedObjectContext];
    }
    else {
        [LAT createNewLATWithData:data inManagedObjectContext:[DatabaseHandler sharedHandler].managedObjectContext];
    }

}
我不确定我是否用最好的方法来做这件事。关于发出请求,创建对象,然后发出下一个请求

我最大的问题是知道什么时候提出下一个请求。i、 e-在请求这些对象并在下一次请求中使用它们之前,知道下载何时完成,所有核心数据对象何时成功创建。我目前手动提出第二个请求,但需要自动完成


我希望这是清楚的。我发现很难解释:-)。提前感谢。

如果您将一个字符串传递到
downloadData:
中,则完成处理程序会在完成时使用该字符串发布通知,该怎么办?当您收到每一个通知时,您就知道下一步该执行哪个步骤。

您好,Philip,谢谢您的回复。当我下载这些县时,我必须在一定数量的区域内循环,这些区域可能不会保持一致。也就是说,将来可能会添加一个额外的区域。您对如何跟踪每个地区的每个县集在核心数据中的下载和创建时间有何建议?如果您选择通知路线,您可以在帖子中添加单个对象或整个“userinfo”字典。其中一个可以描述下载的信息。谢谢。我还使用字符串跟踪正在下载的数据,以便调用核心数据的正确创建方法。一石二鸟:-)