fetchedResultsController 方法中的 NSPredicate 问题
Posted
技术标签:
【中文标题】fetchedResultsController 方法中的 NSPredicate 问题【英文标题】:Issue with NSPredicate in fetchedResultsController method 【发布时间】:2011-05-24 14:42:26 【问题描述】:我正在创建一个应用程序,让销售人员可以通过他们的 iPhone 为他们的客户订购库存。
用户导航到客户并创建订单。出现一个空白的 tableview,然后用户通过从库存屏幕中选择项目来将项目添加到 tableview。
当他们向订单添加商品时,导航控制器会弹出视图并再次显示订单视图。用户应该只能看到该客户的订单。
我最初完全在 sqlite 中构建了应用程序,我通过使用查询实现了这一点
SELECT PRODUCT FROM TRANSLINE WHERE CUSTOMERACCNO = ?
我现在已经转向 Core Data,我需要实现相同的功能。我正在尝试使用 NSPredicate 在 fetchedResultsController 方法中实现此行为,但我似乎无法让它工作 - 我得到的只是一个空白屏幕。但是,当我不实施它时,我会收到 ALL 订单,即每个客户的订单,而不仅仅是这个客户。
这是我的代码:
- (NSFetchedResultsController *)fetchedResultsController
if (__fetchedResultsController != nil)
return __fetchedResultsController;
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Configure the Entity
NSEntityDescription *entity = [NSEntityDescription entityForName:@"TransLine" inManagedObjectContext:__managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];
//Configure the predicate
[NSFetchedResultsController deleteCacheWithName:@"Root"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"customerAccountNo == %@", _customerAccountNo];
[fetchRequest setPredicate:predicate];
//Configure Sort Descriptors
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"PRODAC" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:__managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
return __fetchedResultsController;
提前感谢您的帮助。
【问题讨论】:
更新。我写了一个方法来测试谓词是否有效。该方法返回了一个“[request setReturnsObjectsAsFaults:NO]
行中添加时有效。然而,这并不能解决上述问题。好吧,看来我很沮丧……事实上,我是个白痴。猜猜我忘了包括什么。
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error])
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
【讨论】:
以上是关于fetchedResultsController 方法中的 NSPredicate 问题的主要内容,如果未能解决你的问题,请参考以下文章
FetchedResultsController 中没有部分
如何将对象从 fetchedResultsController 到 Plist?
fetchedResultsController 对象的表视图部分
fetchedResultsController 和 Integer