我正在使用 Objective-C 并在我的程序中遇到一个一致的问题。我有一堆 NSTableView,直到现在,我总是不得不在我的两个函数中不断地“重新加载”数据:numberOfRowsInTableView 和一个用内容填充它们的函数。
例如,我的“loadData()”函数使用获取请求(使用 Core Data)填充在我的 .h 文件中声明的数组。
我只想在我的“awakeFromNib”函数中访问这个 loadData() 函数,或者在更新内容时访问这个函数。但是,如果我不在两个必要的 NSTableView 函数的顶部添加对函数的调用,我发现程序会崩溃。
这开始引起问题,因为我认为在没有任何变化的情况下不断地从核心数据文件中获取是非常多余的。
这是一些代码:
- (int)numberOfRowsInTableView:(NSTableView *)aTableView {
[self loadData];
if ([aTableView isEqual:(invoicesListTable)])
{
return (int)[fetchedInvoices count];
}}
如果我不包含 [self loadData] 函数,程序就会崩溃。即使我在 awakeFromNib 函数中有 [self loadData] 也会发生这种情况。
为什么我的程序没有“记住”我的 fetchedInvoices 数组的值?它在我的 .h 文件中声明如下:NSArray *fetchedInvoices;
我的“loadData”函数如下:
- (void)loadData {
NSError *error = nil;
// fetch all invoices
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Invoice"
inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"InvoiceNumber" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[sortDescriptor release];
fetchedInvoices = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedInvoices == nil) {
NSLog(@"ERROR");
}
[fetchRequest release];
// end of invoice fetch
任何帮助,将不胜感激。