Objective c 核心数据谓词iOS 4->;工程iOS 5->;崩溃

Objective c 核心数据谓词iOS 4->;工程iOS 5->;崩溃,objective-c,ios,core-data,subquery,predicate,Objective C,Ios,Core Data,Subquery,Predicate,我正在开发一个应用程序,它使用核心数据模型,在使用NSPredicate时遇到了一个问题 我的数据模型如下所示: Asset 1 to 1 relationship with SearchAsset many to many relationship with SearchTerms predicate = [NSPredicate predicateWithFormat: @"SUBQUERY(searchTerms, $x, $x.term

我正在开发一个应用程序,它使用核心数据模型,在使用
NSPredicate
时遇到了一个问题

我的数据模型如下所示:

Asset
1 to 1 relationship with SearchAsset
many to many relationship with SearchTerms
predicate = [NSPredicate predicateWithFormat:
                         @"SUBQUERY(searchTerms, $x, $x.term BEGINSWITH %@).@count > 0",prefix];
Asset
有几个字段,如unique\u ID、URL等。。而
SearchTerms
只有一个名为terms的字段<代码>搜索资产没有字段,它只指向资产

当我想进行搜索时,我调用以下代码:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
    dbgPrint(@"Search text: %@", searchText);
    if ([searchText length]>0){
        NSString *prefix = [SearchTerm normalizedTerm:searchText];


        NSPredicate *predicate = nil;
        if ([[[UIDevice currentDevice] systemVersion] floatValue]<5.0){
            predicate = [NSPredicate predicateWithFormat:
                         @"asset != NULL && SUBQUERY(asset.searchTerms, $x, $x.term BEGINSWITH %@).@count > 0",prefix];
        } else {
            predicate = [NSPredicate predicateWithFormat:
                         @"asset != NULL && SUBQUERY(asset.searchTerms, $x, $x.term BEGINSWITH %@).@count > 0",prefix];
        }

        NSFetchedResultsController *theFetcher = self.searchResultsController;
        [theFetcher.fetchRequest setPredicate:predicate];

        NSError *error=nil;
        [theFetcher performFetch:&error];
        if (error){
            dbgPrint(@"Error performing fetch");
            dbgAbort();
        } else {
            NSUInteger count=[[self.searchResultsController fetchedObjects] count];
            dbgPrint(@"Fetching of %d sucessful", count);
            [NSFetchedResultsController deleteCacheWithName:[SearchAsset cacheName]];
            [self.gridView reloadData];
        }
    }
}
谓词解析器在iOS5上的工作方式似乎有所不同,但我无法从苹果那里找到关于这个问题的任何注释

更新

半途而废的解决方案:如果我直接从资产中提取,而不引用SearchAsset,则谓词可以工作。谓词看起来不像这样:

Asset
1 to 1 relationship with SearchAsset
many to many relationship with SearchTerms
predicate = [NSPredicate predicateWithFormat:
                         @"SUBQUERY(searchTerms, $x, $x.term BEGINSWITH %@).@count > 0",prefix];

在我看来,这是iOS5核心数据库中的一个bug。这很不幸,因为我现在必须重写数据库模型的大部分…

如果去掉谓词的
“asset!=null”
部分,您仍然会得到错误吗?不,对不起。。如果我测试asset==NULL,则谓词有效。然后我得到了一大堆的结果。。所以这是关于远期报表asset.searchTerms.term…是否可能是一个区分大小写的问题?您是否尝试了
“资产”
而不是
“资产”
?也许他们开始在iOS 5中对case更加严格了…不,也不是。。我对案件敏感度一直很敏感:-)这是我检查的第一件事。。!同样奇怪的是,当我通过SQLLite数据库应用程序运行解析的IOS5代码时,同样的错误也会发生。解析后的iOS4代码可以正常工作。。这一定是核心数据库中的一个bug。如果你能制作一个非常简单的测试应用程序来演示这个bug,请将它压缩并提交给苹果。