【问题标题】:cannot init a class object-Objective C无法初始化类对象-Objective C
【发布时间】:2011-05-11 12:29:16
【问题描述】:

我需要调用同一个类中已经定义的方法。我是从函数A调用方法initialSession。

-(BOOL)intitiateSession
{
 //stmts
 return YES;
}
-(BOOL)A
{
 if([self initiateSession])
 {
  //stmts
 }
 return YES;
}

得到一个运行时错误,

由于未捕获的异常而终止应用程序

无法初始化类对象

已编辑:

@implementation Data
-(BOOL)initiateSession
{
NSLog(@"I am into the initiateSession!!");
return YES;
}
-(BOOL)getNHPData{
        NSLog(@"In getNHPData!!");
        if([self initiateSession])
                   {
                       NSLog(@"I am into the session");
                   }
     return YES;
}
@end

在 if 循环中,我将调用该函数。执行该函数并执行该函数

执行为真,我进入了范围。我无法从

调用一个函数

其他功能。

【问题讨论】:

  • 请发表您的完整方法
  • 您应该调用self = [super init] 的唯一位置是在您的init 方法内。
  • @Terry Wilcox:你是对的。我如何从同一个类中定义的其他函数调用一个函数?尝试使用上述调用时,我遇到了运行时异常。

标签: objective-c


【解决方案1】:

getNHPData() 不是初始化器,不应调用[super init]。那是你会在你自己的初始化程序中调用的东西。您编写的代码甚至无法编译(您的 @implementation 行不正确)。您肯定会在上面的代码中收到许多您应该听的警告(在一种情况下,您从 BOOL 方法返回self,而在另一种情况下没有return)。您的实际错误表明您正在执行类似[Data getNHPData] 的操作,这是不合法的,因为getNHPData 是一个实例方法。您也应该收到有关此的警告。

首先,清除所有警告。这可能会让你朝着正确的方向前进。 Cocoadevcentral 对您遇到的所有问题都有一个quick intro

【讨论】:

  • 我调试了您在此处指出的错误。感谢您让我了解我在代码中所做的错误。昨天我头疼了 3 个小时。今天不到 10 分钟我可以解决我所有的错误和警告。非常感谢。
【解决方案2】:

您需要在覆盖-(id) init 时调用[super init]

请参阅 #3 和 #6 here

【讨论】:

    【解决方案3】:

    当您在课堂上覆盖 init 时,请始终调用 super init

    【讨论】:

      猜你喜欢
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      相关资源
      最近更新 更多