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

我正在尝试将40,000多条记录的JSON加载到我的Realm Database 。 这是我的function

 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]; 

一切都适用于10 000个物体。 但是当我去40 000时,我收到了这个错误:

 Communications error: <OS_xpc_error:  { count = 1, contents = "XPCErrorDescription" =>  { length = 22, contents = "Connection interrupted" } }> 

谁能帮帮我吗? 提前致谢 !!

编辑

它在“COUNT SI”日志之前崩溃。 所以我认为它与AFNetworking有关? 另外我注意到它没有在模拟器上崩溃……

这个问题与Realm无关。

我正在尝试加载4,000多条记录的JSON

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

另外我注意到它没有在模拟器上崩溃……

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

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

@autoreleasepool包裹循环的主体

同样复制相同的JSON两次似乎是多余的。