"发送到已解除分配的实例的消息" - 找不到保留方法。



我有一个带有分页控制的滚动视图。它根据一个数组加载多个页面,每个页面都有自己的表视图。

   for(id name in categories) {
        NSLog(@"Loading Page.%i",i);
        NSLog(@"categories count:%i",[categories count]);
       TasksPageViewController *tasks = [[TasksPageViewController alloc] init] ;
       tasks = [self.storyboard instantiateViewControllerWithIdentifier:@"TasksPageViewController"];
        CGRect frame = scrollView.frame;
        frame.origin.x = frame.size.width * i;
        frame.origin.y = 0;
        tasks.view.frame = frame;
        [tasks populateWithData:(i-1) categoryName:name];
        [self.scrollView addSubview:tasks.view];
        i++;
    }

.h文件是:

#import <UIKit/UIKit.h>
#import "MainPageViewController.h"
#import "TasksPageViewController.h"
@interface ViewController : UIViewController{
    UIScrollView *scrollView;
    IBOutlet UIPageControl *pageControl;
    // To be used when scrolls originate from the UIPageControl
    BOOL pageControlUsed;
}
@property (nonatomic, strong) IBOutlet UIScrollView *scrollView;
@property (nonatomic, strong) IBOutlet UIPageControl *pageControl;
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
- (IBAction)changePage;
@end

UITableView正在返回

*** -[TasksPageViewController tableView:numberOfRowsInSection:]: message sent to deallocated instance 0x68efac0

(最初是EXEC_BAD_ACCESS,但使用NSZombiesEnabled获得)

我不知道如何继续,我想我必须保留tasks,但如何?

将视图控制器的视图添加为所控制视图的子视图时,需要保留该控制器。使用retain/strong将其保留为一个属性,或者如果有很多,则保留为一组视图控制器

在本例中,将视图添加为子视图会保留该视图,因此您仍然可以引用表视图。但是视图控制器已经被解除锁定,这就是为什么数据源(UITableViewController的视图控制器)方法被发送到解除锁定的实例

此外,为什么要初始化视图控制器,然后立即从情节提要中实例化它?

最新更新