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)toを変更しようとしました。それを試してからコードを実行したところ、次のエラーが発生しました。+ (void)+class method-instance method

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

エラーの解決策を探してみましたが、見つかりませんでした。私が間違っていることはありますか?私のObjective-Cクラスの理解は間違っていますか? 助けてください!

4

3 に答える 3

2

命名規則から始めましょう。クラス名の最初の文字は大文字にする必要があります。に変更class1Class1ます。

次に、インスタンス メソッドなので、メソッドを呼び出す- (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 に答える