簡體   English   中英

僅當通過Testflight安裝時,應用程序才會解析JSON解析

[英]App crashes parsing JSON only when installed via Testflight

因此,我的應用程序首先通過解析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];
            } );
        }
    }
}

我決定發布解決問題的方法,希望它可以幫助像我這樣掙扎的其他人。 因此,在導入JSON文件時,我正在更新進度條以指示將花費多長時間,這是在while循環中,這使CPU占用了最大的時間,與JSON導入一起將CPU占用了大約200%的時間,這導致了應用關閉。

解決方案似乎真的很明顯,不要讓CPU超過100%

我現在計划僅在更改值時才更新進度條,而不是通過while循環不斷更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM