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的问题.
有没有人有任何想法/任何事情可以指出我在这里正确的方向?我无法解决问题所在.我真的希望这里没有太多代码,我只是想尽我所能提供所有信息.
更换:
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)
解决了这个问题.