0

我是 Objective-C 的新手,正在尝试解决类的工作方式,我能够创建类,然后在其中创建方法,然后#import将类放入AppDelegate.m文件中。但是,当我引用类中的方法时,就会出现问题,例如[class1 something]

最初,我class1的头文件和主文件中有以下内容:

标题:

#import <Foundation/Foundation.h>

@interface class1 : NSObject

- (void)something;

@end

主要的:

#import "class1.h"

@implementation class1
- (void)something
{
    NSLog(@"Hello, World");
}
@end

something但是这样做时,当我从以下位置调用该方法时,我遇到了以下错误AppDelegate.mNo known class method for selector 'something'

然后我尝试将- (void)+ (void)文件和主类文件中+的 我试过了,然后运行代码并得到以下错误:class method-instance method

linker command failed with exit code 1 (use -v to see invocation)

我尝试寻找错误的解决方案,但没有找到。有什么我做错了吗?我对 Objective-C 类的理解是错误的吗?请帮忙!

4

3 回答 3

2

让我们从命名约定开始。类应该有一个大写字母作为名称的第一个字母。所以class1改为Class1.

接下来,- (void)something是一个实例方法,因此您需要创建一个实例Class1来调用该方法。您应该将其保留为实例方法,这可能是您想要的,而不是类方法。

Class1 *class1 = [[Class1 alloc] init];
[class1 something];
于 2013-07-20T22:32:43.800 回答
1

您需要实例化该类以访问非静态方法。

class1 *firstObject = [[class1 alloc] init];

[firstObject something];
于 2013-07-20T22:33:11.133 回答
1

好的,当您从您创建的类和应用程序委托中引用该类时,您所做的所有事情都是正确的。

确保执行以下操作:

  • 确保您的方法是 -(void) something
  • 确保你#import它
  • 在委托中初始化类
  • 调用方法

像这样

 //in app delegate
 #import "className.h"

 className *classN = [[className alloc] init];
 [classN something];

这会将类初始化为对象,调用该类的方法,并使其调用 NSlog。

然后确保你从记忆中取出它

 [classN release];
于 2013-07-20T22:34:24.263 回答