0

沒有CoreData獲取的成果坦白地說,我有點不好意思甚至問這個問題的感知和荒誕不能夠親自重現它,但是......在北歐國家

在我的iOS 7應用程序,我收到很多用戶的抱怨,指出應用的某些部分「不起作用」。通過「不工作」,它們意味着由NSFetchRequestDelegate的方法填充的UITableView具有零行。關於錯誤報告的唯一共同點是返回零對象和用戶物理位置的具體NSFetchRequests。用戶都在北歐國家(挪威,瑞典,芬蘭等)。這可能是一個巧合,或者只是北歐人在發現錯誤時更加發聲,但是這個錯誤讓我感到緊張。

我試過將手機設置爲使用Nynorsk作爲默認語言,並使用北歐國際單位(我的應用程序可以愉快地支持NSDateFormatter和朋友)。當我這樣做時,該應用可以正常工作,但我身在美國。我甚至在我的應用程序中使用了一個用戶帳戶,該用戶帳戶的服務器端數據是在芬蘭生成的(字符串中的各種變音符號將與CoreData一起保存),並且它仍然按預期工作。

我看不出有什麼異常我我NSFetchedResultsController的實例,但爲了完整起見,這裏是一個不返回任何結果:

- (NSFetchedResultsController *)fetchedResultsController 
{ 
    if (_fetchedResultsController != nil) 
     return (_fetchedResultsController); 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:kTTAEntityCheckinDetail inManagedObjectContext:MOC]; 
    [fetchRequest setEntity:entity]; 
    [fetchRequest setFetchBatchSize:kTTACheckinDetailBatchSize]; 

    NSSortDescriptor *checkinIDSort = [NSSortDescriptor sortDescriptorWithKey:kTTACheckinDetailAttributeCheckinID ascending:NO]; 
    [fetchRequest setSortDescriptors:@[checkinIDSort]]; 

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:MOC sectionNameKeyPath:@"sectionIdentifier" cacheName:nil]; 
    _fetchedResultsController = aFetchedResultsController; 

    NSError *error = nil; 
    if ([self.fetchedResultsController performFetch:&error] == NO) 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 

    return (_fetchedResultsController); 
} 

這有可能是performFetch失敗,但我用不上到用戶的日誌。也許我應該檢測用戶的位置並將其記錄到遠程服務器上?


解決方案:CoreData未能save的對象,因爲date場是nil。此字段未填充,因爲NSDateFormatterlocale未設置。有關詳細信息,請參閱@ flexaddicted接受的解決方案的評論。

+1

這段代碼沒有問題。我會看看應該填入細胞細節的代碼,以及首先創建和保存Core Data條目的代碼。 –

+1

嘗試將您的語言環境和位置更改爲挪威某處 - 這種方式您將模擬挪威用戶。也許你正在過濾數據的其他地方,也許有錯誤的時區使用或錯誤的日期格式? –

+0

@thom_ek:我已經完成了語言環境的改變,以爲我沒有模擬挪威的GPS位置。這是我可以嘗試的。應該使用'NSDateFormatter'正確格式化,我可以在切換語言環境時進行確認。 – greg

回答

1

這可能是在黑暗中拍攝的。

首先,您檢索什麼類型的對象?基於日期?

然後,是的,我會記錄本地和服務器端。要在本地進行日誌記錄,您可以要求北歐國家的用戶使用Core Data存儲或僅文件日誌發送反饋(基於電子郵件)(日誌將插入正確的點)。後者可以通過CocoaLumberjack來實現。

可以通過NSScreencast在CocoaLumberjackMailing logs處找到這樣的一個例子。

TestFlight可能是一種替代方法,但我猜你正在生產。

+1

@greg我也看看https:// github。com/mattt/Antenna –

+0

這些對象確實具有日期和'UITableView'基於這些分區,但是它們使用'NSDateFormatter'('sectionIdentifier'格式化)格式化。天線看起來可能是解決這個問題的好方法。 – greg

+0

...和它是'NSDateFormatter'。我能夠找到一個國際用戶,並使用TestFlight建議進行遠程記錄。我預感到'performFetch'失敗了。它實際上是'NSManagedObjectContext'的'save',說我的必填字段'date'是零。看起來Web服務正在其他國家返回不同格式的日期,因爲我的格式化程序至少在美國工作正常。 – greg