私はコードを最小限に抑えるためにUITableViewControllerをサブクラス化しようとしています。CoreDataとUITableviewControllerを使ったサブクラス化
私は基本的にスーパークラスのすべてのコードがFetchedResultControllerのために免除されています。これはサブクラスでオーバーライドされます。
この "分割"なしで動作しましたが、今度はEXC_BAD_ACCESSメッセージを返します。ここで
は、私のサブクラスのコードです:
- (NSFetchedResultsController *)fetchedResultsController
{
if (super.fetchedResultsController != nil)
{
return super.fetchedResultsController;
}
id delegate = [[UIApplication sharedApplication] delegate];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Question" inManagedObjectContext:[delegate managedObjectContext]];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];
NSSortDescriptor*sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"up_vote_count" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
//next line returns EXC_BAD_ACCESS
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[delegate managedObjectContext] sectionNameKeyPath:nil cacheName:@"Root2"];
aFetchedResultsController.delegate = self;
super.fetchedResultsController = aFetchedResultsController;
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return super.fetchedResultsController;
}
私はスーパーを使用する必要がある場合、私は好奇心が強いです。または自己しかし、自己。がifステートメントでクラッシュしました。
- EDIT -
ここはスーパークラスの@interfaceです。私のサブクラスには、上書きされたメソッド以外は何も含まれていません。
@interface CoreDataTableView : UITableViewController <NSFetchedResultsControllerDelegate> {
}
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@end
ありがとう!リリースはARCでは許可されていないので、削除しました。それはもはやクラッシュしませんが、メソッドの設定セルは決して呼び出されません。私がcellForRowattIndexPath(スーパークラス内)に奇妙なNSLogを置くと、起動時にアプリケーションがクラッシュします。それが指している行は、管理オブジェクトクラス(完全に前に働いていた)にあります。 –
私が見ることができるから、スーパークラスではテーブルビューのデリゲートメソッドが呼び出されていません。私はxibインターフェイスが必要ですか、それともUITableViewを宣言していますか? –
TableViewControllerの@interface宣言を見れば、私はあなたの質問に答えることができます。あなたはそのコードを投稿できますか?どちらの方法でも、UITableViewControllerはデータを表示するためにUITableViewを必要とします。そのテーブルビューを(コードまたはXIBファイルで)どのように定義しても、UITableViewDelegateとUITableViewDataSourceの両方をUITableViewControllerを指すように設定してください。 – octy