0

我有一个奇怪的错误:如果我取消注释 my NSPredicate,结果UITableView是空的。

我的数据模型如下:类别 <-->> Feed <-->> Post

我正在取Posts。Post.feed是一个Post。有财产。FeedFeedrss NString

这是代码:

    - (NSFetchedResultsController *)fetchedResultsController {

        // Set up the fetched results controller if needed.
        if (_fetchedResultsController == nil) {
            // Create the fetch request for the entity.
            NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
            // Edit the entity name as appropriate.
            NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post"
                                                      inManagedObjectContext:_globalMOC];
            [fetchRequest setEntity:entity];

            // Edit the sort key as appropriate.
            NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
            NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
            [fetchRequest setSortDescriptors:sortDescriptors];

            NSPredicate *predicate =[NSPredicate predicateWithFormat:@"feed.rss == %@",  _detailItem.rss];
            [fetchRequest setPredicate:predicate];

            // Edit the section name key path and cache name if appropriate.
            // nil for section name key path means "no sections".
            NSFetchedResultsController *aFetchedResultsController =
            [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                managedObjectContext:_globalMOC
                                                  sectionNameKeyPath:nil
                                                           cacheName:nil];
            self.fetchedResultsController = aFetchedResultsController;

            self.fetchedResultsController.delegate = self;

            NSError *error = nil;

            if (![self.fetchedResultsController performFetch:&error]) {
                // Replace this implementation with code to handle the error appropriately.
                // abort() causes the application to generate a crash log and terminate.
                // You should not use this function in a shipping application, although it may be useful
                // during development. If it is not possible to recover from the error, display an alert
                // panel that instructs the user to quit the application by pressing the Home button.
                //
                NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
                abort();
            }

        }

        return _fetchedResultsController;
    }

正如我之前所说,如果我取消注释,我只会看到结果NSPredicate。我尝试使用LIKE, ==, =, 用双引号和单引号%@...

顺便说一句,最好的办法是直接比较Feed对象......

根据 Apple 的说法,语法可能不是问题,但那又如何呢?

s 在共享相同 PersistentStoreCoordinator的Post单独 ManagedObjectController 中创建。我得到了所需Feed的 objectID,以便将新对象Post与子 MOC 中的对应对象相关联Feed(否则我会收到关于关联来自不同 MOC 的对象的错误)。

每当子 MOC 通知它发生更改时,我也会适当地将我的 MOC 合并到主线程中。

基本上:如果我NSLogPost(commented-NSPredicate),我会看到每一个都Post带有适合显示的相关 RSS FeedURL Feed(= detailItem)。

任何人都可以帮助我吗?

4

2 回答 2

1

如果您的NSFetchedResultsController是空白的,那么很确定您没有通过 fetch 请求获得任何结果,而且恐怕是因为谓词语句不合适或没有匹配的记录。我想问题是由于存在通配符(对此不太了解)检查NSPredicate 类参考谓词编程指南以通过谓词获得准确的结果。

于 2013-10-25T10:02:35.040 回答
0

尤里卡!

问题如下:当我NSFetchedResultsController在 my 中创建 my 时DetailView_detailItemnil.

因此,即使在设置之后_detailItemNSPredicate仍然专注于将我的提要关系与nil对象进行比较。

我通过以下方式刷新我的问题解决了NSFetchedResultsController.fetchRequest这个didSelectRowAtIndexPath问题MasterView

    Feed *feed;
    if (tableView == self.searchDisplayController.searchResultsTableView) {
        feed = [_filteredCategoryArray objectAtIndex:indexPath.row];
    } else {
        feed = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    }
    self.detailViewController.detailItem = feed;
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"feed == %@", feed];
    [self.detailViewController.fetchedResultsController.fetchRequest setPredicate:predicate];

希望这个解决方案可以帮助其他人。

感谢您的帮助,nickAtStack!

于 2013-10-25T16:18:27.667 回答