【问题标题】:Coredata not supporting in predicate but only on non-home computeCoredata 不支持谓词,但仅支持非家庭计算
【发布时间】:2012-01-25 17:05:00
【问题描述】:

我正在关注苹果关于有效导入数据的示例 (http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData/Articles/cdImporting.html)

我的代码示例如下所示

NSString* predicateString = @" IN %@)";
predicateString = [NSString stringWithFormat:@"(%@%@", predicatePrefix, predicateString];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity: [NSEntityDescription entityForName:entityName inManagedObjectContext: self.managedObjectContext]];
[fetchRequest setPredicate: [NSPredicate predicateWithFormat:predicateString, sortedServerIDs]];

// make sure the results are sorted as well
[fetchRequest setSortDescriptors: [NSArray arrayWithObject:
                                   [[NSSortDescriptor alloc] initWithKey: predicatePrefix
                                                               ascending:YES]]];

NSError *error = nil;
NSArray *matchingManagedObjects = [__managedObjectContext executeFetchRequest:fetchRequest error:&error];

产生的错误是

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 'unimplemented SQL generation for predicate : (businessesID IN {1, 2, 3, 4, 5, 6, 7, 39})'

但是,这可以在模拟器中的家用计算机上运行,​​并且可以在我的设备上运行! 我在两台机器上都运行 xcode 4.2.1。

我尝试遵循这个答案: Does CoreData on iPhone support IN predicates?

但收到同样的错误

如果我在我的机器上检查我的 SQLite 版本很重要:

sqlite3 --version 3.7.8 2011-09-19 14:49:19 3e0da808d2f5b4d12046e05980ca04578f581177

【问题讨论】:

    标签: ios core-data nspredicate


    【解决方案1】:

    当您引用字段名称时,您需要在格式字符串中使用 %K

    NSString* predicateString = @" IN %@)";
    predicateString = [NSString stringWithFormat:@"(%K%@", predicatePrefix, predicateString];
    
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity: [NSEntityDescription entityForName:entityName inManagedObjectContext: self.managedObjectContext]];
    [fetchRequest setPredicate: [NSPredicate predicateWithFormat:predicateString, sortedServerIDs]];
    
    // make sure the results are sorted as well
    [fetchRequest setSortDescriptors: [NSArray arrayWithObject:
                                   [[NSSortDescriptor alloc] initWithKey: predicatePrefix
                                                               ascending:YES]]];
    
    NSError *error = nil;
    NSArray *matchingManagedObjects = [__managedObjectContext executeFetchRequest:fetchRequest error:&error];
    

    【讨论】:

    • 不幸的是仍然收到相同的错误逐字使用:[fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"%K IN %@", predicatePrefix, sortedServerIDs]]; ----------- 错误 --------- *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unimplemented SQL generation for predicate : (businessesID IN {1, 2, 3, 4, 5, 6, 7, 39})'
    • 我也可以从这台机器编译到手机上,也可以。只是不在模拟器中
    • 这可能是模拟器的问题,还是这台机器上的 sqlite 版本的问题?
    猜你喜欢
    • 2010-11-28
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    相关资源
    最近更新 更多