Кажется, я получаю ошибку, которую не могу понять. Надеюсь, это не будет слишком запутанным и длинным, но так как я не могу найти какие-либо ответы в своих поисках, я думаю, что это может быть необходимо. В моей программе есть несколько объектов:
ItemSold
Счет-фактура
Клиент
Customer
может иметь много Invoices
, Invoices
может иметь много ItemSolds
.
В моем Интерфейсном Разработчике у меня есть три таблицы. Одна таблица представляет клиентов, другая представляет счета-фактуры, а последняя представляет товары, проданные в этом счете-фактуре.
Поэтому, когда вы выбираете клиента, его счета отображаются в таблице счетов. После того, как вы щелкнете по счету, элементы этого счета отображаются в последней таблице.
Кажется, я получаю сообщение об ошибке при выборе таблицы. Интересно, что с другой стороны, я могу сделать это нормально (когда я пытаюсь отсортировать Предметы на основе их отношения к Типу). Однако я не могу заставить его работать здесь. Это мой выбор, чтобы получить предметы, которые должны быть сохранены:
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.
У кого-нибудь есть какие-либо идеи / что-либо вообще, чтобы указать мне правильное направление здесь? Я не могу понять, в чем проблема. Я действительно надеюсь, что здесь не было слишком много кода, я просто пытаюсь дать всю информацию, которую могу.