坦白说,我有点尴尬,甚至问这个问题是因为感觉上的荒谬而又无法亲自复制它,但是...

在我的iOS 7应用程序中,我收到了许多用户的投诉,称该应用程序的某些部分“不起作用”。 “不起作用”表示通过UITableView的方法填充的NSFetchRequestDelegate具有零行。错误报告的唯一共同点是返回零对象的特定NSFetchRequests和用户的物理位置。用户全部位于北欧国家(挪威,瑞典,芬兰等)。这可能是一个巧合,或者只是当有一个bug时北欧人更加发声,但是这个bug使我感到紧张。

我尝试将手机设置为使用Nynorsk作为默认语言,并使用Nordic国际单位(我的应用程序很高兴地支持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。由于未设置localeNSDateFormatter,所以未填充此字段。有关详细信息,请参见@flexaddicted接受的解决方案的注释。

最佳答案

这可能是黑暗中的一枪。

首先,您检索什么类型的对象?根据日期?

然后,是的,我将同时在本地和服务器端登录。要在本地登录,您可以要求北欧国家的用户使用Core Data存储或文件日志发送反馈(基于电子邮件)(日志将插入正确的位置)。后者可以通过CocoaLumberjack实现。

NSScreencast的CocoaLumberjackMailing logs可以找到一个示例。

TestFlight可能是一种替代方法,但我想您正在生产中。

10-08 13:18