
objective-C(Xcode)に関して質問があります。
新規プロジェクトからview-base Applicationテンプレートを使用してプロジェクト(TestClass.xcodeproj)を作成します。
そうすると、TestClassAppDelegate.m, TestClassAppDelegate.h, TestClassViewController.h, TestClassViewController.mが
Classesフォルダーに作成されます。このプロジェクトに自分で作成するクラス(MyTestClass)を追加するにはどうすれば良いのでしょうか?
下記のコードではエラーはでませんが、tc.counterにint 10が代入さず、0(nil)が出力されます。
(interfacebuilder でボタンのみ設置、ボタンを押すとpushが呼ばれ、logを残す)
===MyTestClass.h=====
#import <Foundation/Foundation.h>
@interface TestClass : NSObject {
int counter;
}
@property int counter;
@end
===MyTestClass.m=====
#import "TestClass.h"
@implementation TestClass
@synthesize counter;
-(int)calcPlus{
return counter = counter+10;
}
@end
===TestClassViewController.h====
#import <UIKit/UIKit.h>
#import "TestClass.h"
@interface TestClassViewController : UIViewController {
TestClass *tc;
}
-(IBAction) push;
-(void)calc;
@end
===TestClassViewController.m===
#import "TestClassViewController.h"
#import "TestClass.h"
@implementation TestClassViewController
-(IBAction)push{
tc.counter = 10;
NSLog(@"%d", tc.counter);
}
サンプルコード(iPhoneUnitTests ((calc)))をみても、特別なことはなく、ヘッダーの読み込みさえ出来てれば
クラスが使えそうなのですが・・・。
コメントをいただければ、幸いです。
No.3ベストアンサー
- 回答日時:
> URLは下記の通りです。
リンク先の中の「CClasses/CalcViewController.m」。
メソッド「- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil」に記述されている、「_calculator = [Calculator new];」。
その「new」が、インスタンス生成+初期化メソッドです。
詳しくは、NSObjectのリファレンスで、クラスメソッド「new」を調べてください。
※私が勉強したサンプルコードで、newを使っているのは、珍しいです。ほとんどくそまじめに「[[ClassName alloc] init]」と記述しています。そもそもinitで初期化するケースが少なく、「[[NSView alloc] initWithFrame: ~]」のような、クラス独自の初期化メソッドを使っているからだと思いますが……
No.2
- 回答日時:
> サンプルコード(calculator クラス)にはこの記述がなかったのですが、
> そのわけはなぜでしょうか。
そのサンプルコードを見ないと、なにも答えられません。
Apple提供のサンプルコードなら、Appleのデベロッパー向けサイトからすべてダウンロード可能なので、探し出して、URLを記述してください。
※allocしたインスタンスは、どこか不用になった時点でreleaseしてください。あるいはautoreleaseしてください。
すみません。
URLは下記の通りです。
https://developer.apple.com/iphone/library/sampl …
もう少しお教えいただければ幸いです。
No.1
- 回答日時:
インスタンスtcが生成されてません。
allocで生成し、initで初期化しないと、インスタンスは機能しません。
ただ「TestClass *tc;」と宣言するだけでは、だめです。
(ほかにも、怪しいコードがあるんですが……)
push関数に以下のコードを追加しました。
tc = [[TestClass alloc]init];
とりあえず、代入はできました。
ありがとうございました。
サンプルコード(calculator クラス)にはこの記述がなかったのですが、
そのわけはなぜでしょうか。
(良く構造から見てみると、私のと違うのはわかりましたが・・・)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- 英語 提示分の"with"の使い方等について 1 2022/08/23 10:40
- その他(プログラミング・Web制作) 【Python初学者】以下コードについて教えていただきたいです 4 2023/04/19 13:01
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CloseとDisposeの違い
-
Objective-c 画面遷移について
-
objective-C(Xcode)に関して...
-
vb.net フォームアプリケーシ...
-
VB.NET スプラッシュスクリー...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
エクセルVBAで、MsgBox やInput...
-
Excelシート上のマクロを登録し...
-
Googleフォーム・複数人の申し...
-
「PC Helpsoft Driver Updated...
-
男性に対して、『女性への気遣...
-
switch の範囲指定
-
コマンドプロンプトの時間がか...
-
(VBA)チェックボックスのclick...
-
実験ノート作成用テンプレート...
-
EXCEL VBA マクロ 実行する度に...
-
VBA エンターキーでイベントに...
-
グーグル地図 ストリートビュ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CloseとDisposeの違い
-
C# 超初心者です。 this.Refres...
-
[C#]FormクラスのShowメソッド...
-
VB.NET スプラッシュスクリー...
-
VC++クラス間のアクセス
-
フィールド(メンバ変数)のプリ...
-
C#のインスタンスを参照渡ししたい
-
vb.net フォームアプリケーシ...
-
DLL内のイベントをハンドリング
-
Objective-c 画面遷移について
-
どういうプログラムで組みます...
-
objective-C(Xcode)に関して...
-
Javaのあれやこれや
-
コールバックでイベントを使う...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
Excelシート上のマクロを登録し...
-
VBA エンターキーでイベントに...
-
エクセルVBAで、MsgBox やInput...
-
VBAでループ内で使う変数名を可...
おすすめ情報