所以我的应用程序首先运行,解析json文件中的所有信息(包含在项目中)并将其保存到其核心数据模型中。
通过使用XCode进行调试部署可以很好地运行,但是当我通过Testflight安装应用程序时,它会立即崩溃。
我已经确定它是解决json文件的问题,因为我已经创建了一个不能做到这一点的构建&相反,从web api直接获取数据,唯一的问题是从web api下载大约一个小时来从json文件下载所有数据,大约需要一分钟。
我试过禁用BITCODE&确保该方案设置为Release,这似乎通过Testflight涵盖了大多数这些启动问题。两者都没有效果。
我怀疑当通过Testflight分发时,json文件没有正确地与应用程序打包在一起,但我不知道如何解决这个问题。有没有人有任何建议?
我在下面包含我的导入功能,但错误包含在此内,而不是配置中。
json文件大约是26mb,与项目中的大多数其他文件相比非常大。
我的设备是运行iOS 11.2.6和XCode 9.2的iPhone X, 该应用程序也成功运行在所有模拟器上。 我正在使用Objective C
-(void)ImportInitialCards:(NSManagedObjectContext *) managedObjectContext
{
_privateManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
// Configure Managed Object Context
[_privateManagedObjectContext setParentContext:managedObjectContext];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"cardDatabase1" ofType:@"json"];
NSInputStream *inputStream = [[NSInputStream alloc] initWithFileAtPath:filePath];
[inputStream open];
NSArray *cards = [NSJSONSerialization JSONObjectWithStream:inputStream options:kNilOptions error:nil];
float percentage = 1.0 / (float) cards.count;
for (NSDictionary *card in cards)
{
NSString *cardParticularsJson = [card valueForKey:@"cardContent"];
NSData *cardParticularsData = [cardParticularsJson dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *cardParticulars = [NSJSONSerialization JSONObjectWithData:cardParticularsData options:NSJSONReadingMutableContainers error:nil];
NSString *cardName = [cardParticulars valueForKey:@"name"];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Card"];
[request setPredicate:[NSPredicate predicateWithFormat:@"name == %@", cardName]];
NSError *error = nil;
NSUInteger count = [_privateManagedObjectContext countForFetchRequest:request error:&error];
if (count > 0)
{
NSLog(@"CardMatched: %@", cardName);
//card matched
_progress += percentage;
_currentProgressDescription = @"Scanning ...";
}
else
{
_currentProgressDescription = [NSString stringWithFormat:@"Importing: %@", cardName];
NSManagedObject *newCard = [NSEntityDescription insertNewObjectForEntityForName:@"Card" inManagedObjectContext:_privateManagedObjectContext];
[self SaveCardFrom:cardParticulars to:newCard saveThumb:NO inContext:_privateManagedObjectContext];
_progress += percentage;
dispatch_async(dispatch_get_main_queue(),^ {
NSError *error = nil;
[managedObjectContext save:&error];
} );
}
}
}
答案 0 :(得分:0)
我已决定将解决方案发布到我的问题中,希望能帮助像我一样挣扎的其他人。 因此,在导入JSON文件时,我正在更新进度条以指示需要多长时间,这是在最大化CPU的while循环中,与JSON导入一起将CPU发送到大约200%导致应用程序关闭。
解决方案似乎非常明显,不要让cpu超过100%
我现在计划只在更改值时更新进度条,而不是通过while循环不断更新。