我是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.m
时,我遇到了以下错误:No known class method for selector 'something'
然后我尝试将标头版和主要类文件中的- (void)
更改为+ (void)
,因为我在+
以外的地方阅读会使方法成为class method
和{{1将方法设为-
。我尝试了然后运行代码并得到以下错误:
instance method
我尝试搜索错误的解决方案,但没有找到。 有什么我做错了吗?我对Objective-C类的理解是错误的吗?请帮忙!
非常感谢!
答案 0 :(得分:2)
让我们从命名约定开始。类应该有一个大写字母作为名称的第一个字母。因此,将class1
更改为Class1
。
接下来,- (void)something
是一个实例方法,因此您需要创建一个Class1
实例来调用该方法。你应该将它保存为实例方法,这可能是你想要的,而不是类方法。
Class1 *class1 = [[Class1 alloc] init];
[class1 something];
答案 1 :(得分:1)
您需要实例化该类以访问非静态方法。
class1 *firstObject = [[class1 alloc] init];
[firstObject something];
答案 2 :(得分:1)
好的,当您从您创建的类和应用程序委托中引用该类时,您在所做的所有事情中都是正确的。
确保执行以下操作:
喜欢这样
//in app delegate
#import "className.h"
className *classN = [[className alloc] init];
[classN something];
这会将类初始化为一个对象,从该类调用该方法,并使其调用NSlog。
然后确保从内存中取出
[classN release];