1

我似乎得到一个我无法理解的错误。希望这不会太混乱和长期,但因为我似乎无法在我的搜索中找到任何答案,所以我认为这可能是必要的。在我的计划,我有几个实体:CoreData/RegEx错误:无法从对象创建正则表达式

ItemSold 发票 客户

Customer的可以有很多InvoicesInvoices可以有很多ItemSolds

在我的界面生成器中,我有三个表格。一张表代表客户,另一张代表发票,最后一张代表发票中的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 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的问题。

有没有人有任何想法/任何东西在这里指向我在正确的方向?我无法将自己的思想包围在问题所在之处。我真的希望这里没有太多的代码,我只是想给我所有的信息。

回答

8

替换:

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"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"invoice.InvoiceNumber = %@", invoiceString]; 

解决了这个问题。