Objective c CoreData/RegEx错误:无法从对象创建RegEx表达式

Objective c CoreData/RegEx错误:无法从对象创建RegEx表达式,objective-c,core-data,nstableview,nspredicate,nsmanagedobjectcontext,Objective C,Core Data,Nstableview,Nspredicate,Nsmanagedobjectcontext,我似乎犯了一个我不能真正理解的错误。希望这不会变得太混乱和冗长,但由于我在搜索中似乎找不到任何答案,我认为这可能是必要的。在我的程序中,我有几个实体: 物品出售 发票 顾客 客户可以有许多发票,发票可以有许多项目 在界面生成器中,我有三个表。一个表表示客户,另一个表表示发票,最后一个表表示该发票中的ItemSold。 因此,当您选择客户时,他们的发票将显示在发票表中。单击发票后,该发票上的项目将显示在最后一个表中 当我在一张桌子上选择时,我似乎遇到了错误。有趣的是,在另一个视图中,当我尝试根据项

我似乎犯了一个我不能真正理解的错误。希望这不会变得太混乱和冗长,但由于我在搜索中似乎找不到任何答案,我认为这可能是必要的。在我的程序中,我有几个实体:

物品出售 发票 顾客

客户可以有许多发票,发票可以有许多项目

在界面生成器中,我有三个表。一个表表示客户,另一个表表示发票,最后一个表表示该发票中的ItemSold。 因此,当您选择客户时,他们的发票将显示在发票表中。单击发票后,该发票上的项目将显示在最后一个表中

当我在一张桌子上选择时,我似乎遇到了错误。有趣的是,在另一个视图中,当我尝试根据项目与类型的关系对项目进行排序时,我可以做到这一点。但是我不能让它在这里工作。这是我获取应存储的项目的方法:

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(HistoryController *)[[NSApplication sharedApplication] delegate] managedObjectContext]; 
}
NSError *error = nil;

// fetch all customers
NSFetchRequest *fetchRequest2 = [[NSFetchRequest alloc] init];
NSEntityDescription *entity2 = [NSEntityDescription entityForName:@"Customer"
                                           inManagedObjectContext:managedObjectContext];
[fetchRequest2 setEntity:entity2];
fetchedCustomers = [managedObjectContext executeFetchRequest:fetchRequest2 error:&error];
if (fetchedCustomers == nil) {
    NSLog(@"ERROR");
}
[fetchRequest2 release];
// end of customer fetch

// fetch all invoices
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Invoice"
                                          inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSLog(@"A");
if ([customerTable selectedRow] >= 0)
{
    NSLog(@"B");

    int index = (int)[customerTable selectedRow];

    NSLog(@"%@", index);
    NSString *customerString = [[fetchedCustomers objectAtIndex:(index)] valueForKey:@"CustomerNumber"];
    NSNumber *customerNumber = [NSNumber numberWithInt:([customerString intValue])];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"customer.CustomerNumber like %@", customerNumber];
    [fetchRequest setPredicate:predicate];
}

fetchedInvoices = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedInvoices == nil) {
    NSLog(@"ERROR");
}
[fetchRequest release];
// end of invoice fetch

// fetch specific invoice
NSFetchRequest *fetchRequest3 = [[NSFetchRequest alloc] init];
NSEntityDescription *entity3 = [NSEntityDescription entityForName:@"ItemSold"
                                           inManagedObjectContext:managedObjectContext];
[fetchRequest3 setEntity:entity3];

if ([invoicesListTable selectedRow] >= 0)
{

    NSLog(@"C");
    int index = (int)[invoicesListTable selectedRow];

    NSLog(@"%i", (int)[invoicesListTable selectedRow]);
    NSLog(@"%i", index);
    NSString *invoiceString = [[fetchedInvoices objectAtIndex:(index)] 
                                valueForKey:@"InvoiceNumber"];
    NSNumber *invoiceNumber = [NSNumber numberWithInt:([invoiceString intValue])];
    NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"invoice.InvoiceNumber like %@", invoiceNumber];
    [fetchRequest3 setPredicate:predicate3];
}

NSLog(@"D");

fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest3 error:&error];
if (fetchedObjects == nil)
{
    NSLog(@"ERROR");
}
[fetchRequest3 release];

[invoiceTable reloadData];
NSLog(@"D2");
}

如果我执行并单击一行,我得到的是:

2012-02-13 16:42:35.326盘点计划[7056:707]A

2012-02-13 16:42:35.327盘点计划[7056:707]C

2012-02-13 16:42:35.327盘点计划[7056:707]0

2012-02-13 16:42:35.328盘点计划[7056:707]0

2012-02-13 16:42:35.328盘点计划[7056:707]D

2012-02-13 16:42:35.329清单程序[7056:707]无法从对象2创建正则表达式

我显示这些字母的输出只是为了显示控件跟随的位置。接下来,我选择一行,输出正确的行号0,事实上,我认为问题出在哪里。输出字母D,它通过NSPredicate区域,这就是我认为正则表达式问题的根源。我现在假设它到达executeFetchRequest,并遇到分配给它的NSPreditate的问题

有没有人有任何想法/任何东西可以为我指明正确的方向?我不知道问题出在哪里。我真的希望这里没有太多的代码,我只是想提供我能提供的所有信息。

替换:

NSString *invoiceString = [[fetchedInvoices objectAtIndex:(index)] 
                            valueForKey:@"InvoiceNumber"];
NSNumber *invoiceNumber = [NSNumber numberWithInt:([invoiceString intValue])];
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"invoice.InvoiceNumber like %@", invoiceNumber];
与:

解决了这个问题

替换:

NSString *invoiceString = [[fetchedInvoices objectAtIndex:(index)] 
                            valueForKey:@"InvoiceNumber"];
NSNumber *invoiceNumber = [NSNumber numberWithInt:([invoiceString intValue])];
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"invoice.InvoiceNumber like %@", invoiceNumber];
与:

解决了这个问题