Ios 使用SharedSingleton调用方法

Ios 使用SharedSingleton调用方法,ios,Ios,我有一个UIviewController。我想将UIView添加为子视图,但由于UIView没有viewdidload方法,因此需要手动调用方法。我使用共享单例进行此操作的方式如下: 在view.m中,我有: + (TableLoadGroupMembersViewController *)sharedManager { static TableLoadGroupMembersViewController *shaderManager = nil; static dispatch_once_t

我有一个UIviewController。我想将UIView添加为子视图,但由于UIView没有viewdidload方法,因此需要手动调用方法。我使用共享单例进行此操作的方式如下:

在view.m中,我有:

+ (TableLoadGroupMembersViewController *)sharedManager
{
static TableLoadGroupMembersViewController *shaderManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    shaderManager = [[TableLoadGroupMembersViewController alloc] init];
});
return shaderManager;
}

- (void)LoadTheView
{
TableViewGroupMembers = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
TableViewGroupMembers.dataSource = self;
TableViewGroupMembers.delegate = self;
[TableViewGroupMembers addSubview:TableViewGroupMembers];
}
在视野中。我有

+ (TableLoadGroupMembersViewController *) sharedManager;
- (void)LoadTheView;
在viewcontroller.m中,我有:

CGRect frame = CGRectMake(100, 100, 300, 100);
TableLoadGroupMembersViewController *view = [[TableLoadGroupMembersViewController alloc] initWithFrame:frame];
[self.view addSubview:view];

TableLoadGroupMembersViewController* sharedSingleton = [TableLoadGroupMembersViewController sharedManager];
[sharedSingleton LoadTheView];
但应用程序崩溃了。为什么?

编辑:

错误为:0x281db5d:PUSH%esi。。。线程1:EXC\u错误访问

但应用程序崩溃了。为什么?

因此,这里您正在创建视图控制器的新实例:

TableLoadGroupMembersViewController *view = [[TableLoadGroupMembersViewController alloc] initWithFrame:frame];
这将崩溃。视图有
-initWithFrame
方法,但您的视图控制器可能没有

接下来,将该视图控制器添加为
self.view
的子视图:

[self.view addSubview:view];
但是视图控制器不是视图,即使将变量命名为
view
,也不能将其添加为子视图如果第一行没有崩溃,这一行就会崩溃。

看起来您将视图控制器类与UIView子类混淆了。深吸一口气,在假装是别人写代码的同时通读代码,试着弄清楚这里应该发生什么

(不过,如果您花时间在调试器中逐步检查代码,并确定发生崩溃的特定行,这将对将来有很大帮助。)


我不相信(根本不相信)您出于任何原因需要在这里使用单例,但崩溃几乎肯定是因为发送了接收者没有实现的消息,这归结为视图和视图控制器之间的混淆。

考虑到您在这里问了多少问题,现在,您应该知道,如果您发布了一个关于崩溃或错误的问题,您需要发布有关错误消息和/或堆栈跟踪的详细信息。是的,您是对的,但错误不在代码中,而在线程中,所以我只是认为不会important@Alessandro错误在代码中。除非代码错误,否则线程不会崩溃。查看调试器控制台或崩溃日志中的输出,或者至少告诉我们崩溃发生时正在执行哪一行。请查看带有错误的编辑谢谢您的回答。我使用单例调用UIview子类中的方法视图控制器不需要单例调用视图中的方法,因为它已经有指向视图的指针。视图通常不需要在视图控制器中调用方法,但当它们调用方法时,委托是一种比单例更好的模式。“您的视图控制器不需要单例来调用视图中的方法,因为它已经有一个指向视图的指针”那么,在UIview中运行方法的其他方法是什么?(因为没有viewdidload)啊,现在我使用-(id)initWithFrame:(CGRect)frame{self=[super initWithFrame:frame];if(self){//初始化代码}返回self;}