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