当方、Objective-Cに関して1年にも満たない経験を持つ初心者です。
初歩的な内容だとは思いますが行き詰まってしまったため質問させて下さい。
複数の.hと.mファイルで定義された複数クラス間で一つの変数を共通で利用し、あるクラスのメソッド内で値を変更した際にそれ以外のクラスですぐに反映出来る様にしたいのですが、どの様に書いても値が反映されず初期値のまま出力されてしまいます。恐らく各クラス内のメソッドが呼ばれる順番に起因すると思うのですが、上手く解決出来ません。
現在書いているコードとして、
-xxxAppDelegate.h
(at)interface xxxAppDelegate : NSObject <UIApplicationDelegate> {
...
int globalNum;
}
(at)property(nonatomic, assign)int globalNum;
(at)end
-xxxAppDelegate.m
...
(at)implementation xxxAppDelegate
(at)synthesize globalNum;
...
(at)end
-A.h
...
(at)interface AController : UIViewController {
xxxAppDelegate *appDelegate;
}
...
-(void)changeNum;
-(IBAction)changeController;
(at)end
-A.m
...
(at)implementation AController
...
- init(){
appDelegate = (xxxAppDelegate *)[[UIApplication sharedApplication] delegate];
}
...
-(void)changeNum{
//ここでglobalNumの値を変更;
appDelegate.globalNum=...;
}
...
//配置したボタンを押すとA->BにviewControllerを切り替える
-(IBAction)changeController{
BController *B = [[BController alloc] initWithNibName:(at)"BController" bundle:nil];
B.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:B animated:YES];
[B release];
}
...
(at)end
-B.h
...
(at)interface BController : UIViewController {
xxxAppDelegate *appDelegate;
}
...
-(void)readNum;
(at)end
-B.m
...
(at)implementation BController
...
- init(){
appDelegate = (xxxAppDelegate *)[[UIApplication sharedApplication] delegate];
}
...
-(void)readNum{
//globalNumの値を見る;
NSLog((at)"%d" , appDelegate.globalNum);
}
...
(at)end
となっています。( (at)=アットマークです。 )
xxxAppDelegateおよびxxxViewControllerよりAControllerを呼び出し、AクラスのchangeNumメソッドでglobalNumの値を変更した後、ボタンを押下してviewControllerをBControllerに切り替え、Bクラス内のreadNumメソッドでglobalNumの値を確認すると、変更が反映されていない事が分かります。
この方法以外にも色々と試してみたのですが、すっきりとしたコードが書けず、解決に至りませんでした。
申し訳ありませんが、皆さんの知恵をお貸し下さい。
よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
> ※(1)(2)について
> 流石にそれぐらいは分かってます.....
> それを理解した上で質問しているのですが.....
わかっていたら、こんなコードは書きません。
あなたの理解は間違っています。
> ※「@」について
> 質問の投稿内容に「@」を付けると著作権問題となりOKWaveのサポートセンターで確認した後に公表されるそうなので、あえて外しました。
なるほど、かつてじぶんが回答した質問が、問題ありとなって、アクセス不可になったことがありましたが、そういうことだったのですか。勉強になりました。
>わかっていたら、こんなコードは書きません。
>あなたの理解は間違っています。
どうも重大な誤解を抱えたままコードを記述しているようですね......
理解を間違えてる、と言われてしまっては何も言えません。
反省します。
ご回答ありがとうございました。
No.2
- 回答日時:
再勉強の一助として、書き記しておくならば……
(1) クラスとインスタンス(オブジェクト)の違いを、判別できるようになる。
クラスを「alloc」すると、新しいインスタンスが生成されます。既存のインスタンスとは別のインスタンスです。
(2) インスタンスは、メモリ上にバッファされている。
バッファされる前のインスタンスにアクセスすると、エラーになりますし、バッファが開放されたインスタンスにアクセスしても、エラーになります。インスタンスにアクセスする前に、かならずインスタンスがバッファされているか、確認するコードが必要です。
※「@」。アットマークは、ちゃんと入力できますよ。
お早い御返事ありがとうございます。
※(1)(2)について
流石にそれぐらいは分かってます.....
それを理解した上で質問しているのですが.....
※「@」について
質問の投稿内容に「@」を付けると著作権問題となりOKWaveのサポートセンターで確認した後に公表されるそうなので、あえて外しました。
とは言え、Objective-Cについて十分な勉強を行っていないのも事実ですので、一から勉強し直したいと思います。
回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 一般のyou, we,theyなどの答え方がわかりません。 2 2022/10/29 15:22
- 英語 「第2文型主語のwhat節が前置詞の目的語である場合に、補語の前に同じ前置詞が必須なのか」について 2 2023/05/12 11:17
- 輸入車 ニュービートルカブリオレ6速AT変速操作不良について 4 2022/12/27 23:59
- 物理学 写真の赤枠ついてですが、 BC間の鉛直方向についでの式で「x=v0-at」という式を用いていますが、 4 2023/05/16 17:33
- その他(エンターテインメント・スポーツ) 女優『ジュリア ロバーツ』はリチャード・ギヤの奥様シルヴァさんですか? 1 2022/12/28 23:33
- 音楽・動画 “YT Music” アプリと “AT player” アプリは大きく何が違うの? 2 2022/09/20 13:42
- 英語 Greater stress was reported in axial direction at 1 2022/07/20 12:46
- その他(趣味・アウトドア・車) 2004年式レガシィb4 2.0GT 50thアニバーサリーのミッション載せ替えってどれくらいの費用 2 2022/09/13 09:31
- 国産車 CVTやATのオイル交換について教えて下さい 7 2022/05/10 09:54
- 中学校 英語の表現はあっていますか? 中学英語 1 2022/08/02 21:44
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
private static という変数の修飾
-
変数名の付け方
-
生成したインスタンスを削除す...
-
インスタンス参照でアクセスで...
-
C#において、同じインスタンス...
-
文字列を日付に変換でParseExce...
-
C# インスタンスの破棄
-
複数の変数を宣言する時、同時...
-
String a = "a"; と String b =...
-
「共有メンバにアクセスするイ...
-
インスタンス生成で、○○.xxx();...
-
VB.NET getとsetの概念がわかり...
-
C#のメモリ解放についてご教授...
-
C#でオブジェクトの有無を取得する
-
「インスタンス」の意味をわか...
-
[Visual C#] 優先される処理に...
-
カンマ区切りの数値文字列を数...
-
シーケンス図について
-
非staticフィールドを参照でき...
-
フォームの存在をチェックする方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
文字列を日付に変換でParseExce...
-
String a = "a"; と String b =...
-
変数の参照でエラーが出てしま...
-
「インスタンス」の意味をわか...
-
フォームの存在をチェックする方法
-
SQLを連続発行する時の正しい(?...
-
javaのクラスの作り方、エラー...
-
他のファイルの変数参照
-
オブジェクト参照がオブジェク...
-
C#「オブジェクト参照が必要で...
-
エクセル(複数インスタンス)...
-
VB6.0で、DLLを動的に参照したい
おすすめ情報