坦白说,我有点尴尬,甚至问这个问题是因为感觉上的荒谬而又无法亲自复制它,但是...
在我的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
。由于未设置locale
的NSDateFormatter
,所以未填充此字段。有关详细信息,请参见@flexaddicted接受的解决方案的注释。 最佳答案
这可能是黑暗中的一枪。
首先,您检索什么类型的对象?根据日期?
然后,是的,我将同时在本地和服务器端登录。要在本地登录,您可以要求北欧国家的用户使用Core Data存储或文件日志发送反馈(基于电子邮件)(日志将插入正确的位置)。后者可以通过CocoaLumberjack实现。
NSScreencast的CocoaLumberjack和Mailing logs可以找到一个示例。
TestFlight可能是一种替代方法,但我想您正在生产中。