Ios 尝试将大量数据加载到我的应用程序时,应用程序崩溃

Ios 尝试将大量数据加载到我的应用程序时,应用程序崩溃,ios,objective-c,json,afnetworking,realm,Ios,Objective C,Json,Afnetworking,Realm,我正在尝试将40000多条记录的JSON加载到我的Realm数据库中。这是我的功能 AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc]init]; [AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]]; operation = [AFJSONRequestOperation JSONReques

我正在尝试将40000多条记录的
JSON
加载到我的
Realm数据库中
。这是我的功能

AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc]init];
[AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];

operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

    NSArray *relations = [JSON copy];
    NSLog(@"COUNT SI %d",relations.count);

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSArray *relations = [JSON copy];
        RLMRealm *realm = [RLMRealm defaultRealm];
        [realm beginWriteTransaction];

        for (NSDictionary *dict in relations) {
            Relation *relation = [[Relation alloc]init];

            relation.rel_address = [NSString stringWithFormat:@"%@",[dict valueForKey:@"Address"]];
            relation.rel_balanceTotal = [[dict valueForKey:@"BalanceTotal"]doubleValue];
            relation.rel_bank_country_code = [NSString stringWithFormat:@"%@",[dict valueForKey:@"BankCountryCode"]];
            relation.rel_bank_number = [NSString stringWithFormat:@"%@",[dict valueForKey:@"BankNumber"]];
            relation.rel_city = [NSString stringWithFormat:@"%@",[dict valueForKey:@"City"]];
            relation.rel_city_id = [[dict valueForKey:@"CityId"]intValue];
            relation.rel_code = [NSString stringWithFormat:@"%@",[dict valueForKey:@"Code"]];
            relation.rel_country = [NSString stringWithFormat:@"%@",[dict valueForKey:@"Country"]];
            relation.rel_country_code = [NSString stringWithFormat:@"%@",[dict valueForKey:@"CountryCode"]];
            relation.rel_customerProspect = [NSString stringWithFormat:@"%@",[dict valueForKey:@"CustomerProspect"]];
            relation.rel_customerCode = [NSString stringWithFormat:@"%@",[dict valueForKey:@"CustomerProspectCode"]];
            relation.rel_email = [NSString stringWithFormat:@"%@",[dict valueForKey:@"Email"]];
            relation.rel_expired_total = [[dict valueForKey:@"ExpiredTotal"]doubleValue];
            relation.rel_fax = [NSString stringWithFormat:@"%@",[dict valueForKey:@"Fax"]];
            relation.rel_gsm = [NSString stringWithFormat:@"%@",[dict valueForKey:@"GSM"]];
            relation.rel_latitude = [[dict valueForKey:@"Latitude"]doubleValue];
            relation.rel_longitude = [[dict valueForKey:@"Longitude"]doubleValue];
            relation.rel_memo = [NSString stringWithFormat:@"%@",[dict valueForKey:@"Memo"]];
            relation.rel_name = [NSString stringWithFormat:@"%@",[dict valueForKey:@"Name"]];
            relation.rel_phone = [NSString stringWithFormat:@"%@",[dict valueForKey:@"Phone"]];
            relation.rel_turnovertotal = [[dict valueForKey:@"TurnoverTotal"]doubleValue];
            relation.rel_vat_country_code = [NSString stringWithFormat:@"%@",[dict valueForKey:@"VATCountryCode"]];
            relation.rel_vat_number = [NSString stringWithFormat:@"%@",[dict valueForKey:@"VATNumber"]];
            relation.rel_website = [NSString stringWithFormat:@"%@",[dict valueForKey:@"Website"]];
            relation.rel_zipcode = [NSString stringWithFormat:@"%@",[dict valueForKey:@"ZipCode"]];
            [realm addObject:relation];
        }
        [realm commitWriteTransaction];
        compblock(YES);

    });


} failure:^( NSURLRequest *request ,NSHTTPURLResponse *response ,NSError *error , id JSON ){
    NSLog(@"error is %@",error);
}];
[operation start];
对于10000个对象,一切正常。但当我达到40000时,我得到了这个错误:

Communications error: <OS_xpc_error: <error: 0x356dc614> { count = 1, contents =
    "XPCErrorDescription" => <string: 0x356dc86c> { length = 22, contents = "Connection interrupted" }
}>
通信错误:{length=22,contents=“连接中断”}
}>
有人能帮我吗?提前谢谢

编辑

它在“COUNT SI”日志之前崩溃。所以我认为这与AFN网络有关?
我还注意到它不会在模拟器上崩溃…

这个问题与领域无关

我正在尝试加载一个超过40000条记录的JSON

这是你的问题
AFJSONRequestOperation
将尝试在内存中反序列化JSON,您的应用程序将不再具有任何可用内存,并将被终止

我还注意到它不会在模拟器上崩溃

这是因为模拟器可以访问比iOS设备多得多的内存


您应该找到减少网络请求大小的方法,一次请求更少的数据,或者使用比JSON字符串更少浪费的响应格式。

@autoreleasepool


同样,复制同一个JSON两次似乎是多余的。

wooooow-不要这样做。添加分页,使用CoreData。不要一次加载这么多的数据-数据来自哪里?很可能,当您请求如此多的数据时,服务器会花费大量时间构建响应,导致连接超时。在类似的情况下,如果连接超时,我必须构建一种启发式方法来“调优”请求的大小。Grzegorz Krukowski认为不应该一次将这么多数据加载到内存中,这是正确的,但我认为没有理由在域上使用核心数据。事实上,一旦插入数据,Realm将使用更少的内存。JSON解析占用了非常大的内存!你有什么解决办法吗?我也遇到了同样的问题,但记录的数量减少了。@现在我放弃了核心数据的使用,我现在使用Realm(www.Realm.io)的速度快多了!!!好了,我现在要在我的JSON中使用分页!谢谢你的帮助!