私は Objective-C で作業しており、プログラムで一貫した問題に遭遇しています。私は多数の NSTableView を持っていますが、この時点まで、numberOfRowsInTableView とそれらをコンテンツで埋める関数の 2 つの関数で常にデータを「リロード」する必要がありました。
たとえば、私の「loadData()」関数は、私の .h ファイルで宣言された配列に (Core Data を使用して) フェッチ要求を入力します。
「awakeFromNib」関数で、または物事が更新されるたびに、この loadData() 関数にアクセスするだけで済みます。ただし、必要な 2 つの NSTableView 関数の先頭に関数の呼び出しを追加しないと、プログラムがクラッシュすることがわかりました。
これは問題を引き起こし始めています。何も変更されていないときに Core Data ファイルから常にフェッチするのは非常に冗長であると私は信じています。
ここにいくつかのコードがあります:
- (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
どんな助けでも大歓迎です。