Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UITableViewController发布后应用程序崩溃_Iphone_Objective C_Cocoa Touch_Xcode - Fatal编程技术网

Iphone UITableViewController发布后应用程序崩溃

Iphone UITableViewController发布后应用程序崩溃,iphone,objective-c,cocoa-touch,xcode,Iphone,Objective C,Cocoa Touch,Xcode,我有一个从核心数据中检索数据并将其存储到NSMutablearray的类。它还有一个返回此数组的函数 datamanager.h: @interface DataManager : NSObject { NSMutableArray *feedItems; ... } @property (nonatomic, retain) NSMutableArray *feedItems; ... datamanager.m: ... -(void)loadNews{

我有一个从核心数据中检索数据并将其存储到NSMutablearray的类。它还有一个返回此数组的函数

datamanager.h:

@interface DataManager : NSObject {

    NSMutableArray *feedItems;
    ...    
}

@property (nonatomic, retain) NSMutableArray *feedItems; 
...
datamanager.m:

...
-(void)loadNews{
    (load data from core data and put it in self.feedItems) 
    ....
}

-(NSMutableArray*)getAllItems{
    return self.feedItems;
}
现在我有了一个UIViewController,其中有两个UIView(View1和View2)作为IBOutlet。单击View1中的按钮时,它将从datamanager类获取数据,并将其设置为NSMutablearray,以用于UItableviewController(tableView1)

在分配和初始化tableView1并设置Nsmutablearray来填充表之后,我将其视图作为子视图添加到视图2中。现在我的问题是,当我在这个过程之后释放tableview1时,我得到了一个EXEC\u BAD\u访问权限

View1按钮iAction代码:

-(void)loadItems{
    if ([[dataManager getAllNews] count] > 0) {
        ItemTableViewController *tableView1 = [[ItemTableViewController alloc] initWithNibName:@"ItemTableViewController" bundle:nil];

        [tableView1 setItemList:[sectionManager getAllItems]];

        for (UIView *view in View2.subviews) {
            [view removeFromSuperview];
        }

        [View2 addSubview:tableView1.view];

        [tableView1 release]; // if this is not released it works properly else EXEC_BAD_ACCESS
    }

}
tableView1 setItemList函数:

-(void)setItemList:(NSMutableArray *)list{
    self.ItemList = list; //self.ItemList is a NSMutableArray
}

如何正确发布tableView1?我也尝试过自动释放,但仍然不起作用。

如果您以这种方式使用UIViewController,您必须保留tableView1,然后在以后不再使用时释放它。这可以通过放置

[tableView1.view removeFromSuperview];
[tableView1 release];

在您的
dealloc

中,UITableView和UITableViewController之间存在差异。只要使用视图,控制器就应该保持不变,因此不应该在那里释放UITableViewController(tableView1)

例如,在dealoc方法中释放它

另外,为什么有一个
-(NSMutableArray*)getAllItems
方法?这是一个不必要的步骤,因为合成属性已经生成了getter和setter。


UITableViewController设计用于UINavigationController和/或UITableViewController。它们不应该像你这样使用

你可以做到这一点,但你真的在与操作系统作斗争


您应该切换到UINavigationControllers设置,或者只使用直接的UITableView(不通过UITableViewController)

非常好的建议,无论如何苹果都不推荐在视图控制器中使用视图控制器。这有可能在应用商店中被拒绝吗?我真的很想知道。你所说的对抗操作系统是什么意思?苹果不会因为你所做的事而责骂你,但我所说的“对抗操作系统”是指:视图控制器(在iPhone上)设计得最好,可以通过Nav/TAB控制器实现全屏视图。他们可以像你一样工作,但是你会失去他们的许多好处,做更多的工作。