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

Rai*_*l24 1 core-data objective-c nstableview nspredicate nsmanagedobjectcontext

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

ItemSold发票客户

Customer可以有很多Invoices,Invoices可以有很多ItemSolds.

在我的Interface Builder中,我有三个表.一个表代表客户,另一个代表发票,最后一个代表发票中的项目.因此,当您选择客户时,他们的发票会显示在发票表中.单击发票后,该发票上的项目将显示在最后一个表格中.

当我在桌子上选择时,我似乎得到了错误.有趣的是,在另一种观点中,我可以做得很好(当我尝试根据他们与Type的关系对Items进行排序时).但是我无法在这里工作.这是我获取应该存储的项目:

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");
Run Code Online (Sandbox Code Playgroud)

}

如果我执行,并点击一行,这就是我得到的:

2012-02-13 16:42:35.326 InventoryProgram[7056:707] A

2012-02-13 16:42:35.327 InventoryProgram[7056:707] C

2012-02-13 16:42:35.327 InventoryProgram[7056:707] 0

2012-02-13 16:42:35.328 InventoryProgram[7056:707] 0

2012-02-13 16:42:35.328 InventoryProgram[7056:707] D

2012-02-13 16:42:35.329 InventoryProgram[7056:707] Can't create a regex expression from object 2.

我正在显示字母的输出,以显示控件的位置.它跟随我选择一行,输出正确的行号(0),实际上使它超过了我认为问题的位置.输出字母D,它通过NSPredicate区域,这是我认为正则表达式问题的来源.我现在假设它到达executeFetchRequest,并遇到分配给它的NSPredicate的问题.

有没有人有任何想法/任何事情可以指出我在这里正确的方向?我无法解决问题所在.我真的希望这里没有太多代码,我只是想尽我所能提供所有信息.

Rai*_*l24 8

更换:

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

附:

NSString *invoiceString = [[fetchedInvoices objectAtIndex:(index)] 
                                valueForKey:@"InvoiceNumber"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"invoice.InvoiceNumber = %@", invoiceString];
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.