簡體   English   中英

“消息發送到解除分配的實例” - 找不到保留的方法。

[英]“message sent to deallocated instance” - Can't find a way to retain.

我有一個帶分頁控件的滾動視圖。 它根據數組加載多個頁面,每個頁面都有其表視圖。

   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的屬性,或者如果存在許多視圖控制器,則將其保留為視圖控制器數組

在這種情況下,將視圖添加為子視圖已保留它,因此您仍然可以引用表視圖。 但視圖控制器已被dealloc'd,這就是為什么數據源(它是UITableViewController的視圖控制器)方法被發送到解除分配的實例

另外,為什么要初始化視圖控制器,然后立即從故事板中實例化它?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM