iPhone SDKを使用していて、何か簡単な問題があります。 NSNumberオブジェクトをNSMutableArrayインスタンス変数に追加しようとしています。 NSMumber カードをNSMutableArray viewedCardsArrayに追加しようとしましたが、破損することなく配列に追加されません。ここにコードがあります。Objective CのNSMutableArrayにオブジェクトを追加できません。
/////////////////////////////////////////////////////
// Inside the header file Class.h
@interface MyViewController : UIViewController {
NSMutableArray *viewedCardsArray;
//snip ...
}
@property (nonatomic, retain) NSMutableArray *viewedCardsArray;
@end
/////////////////////////////////////////////////////
// Inside the methods file Class.m
#import "StudyViewController.h"
@implementation StudyViewController
@synthesize viewedCardsArray
//snip ...
- (IBAction)doShowCard {
//snip ...
NSNumber *cardIdObject = [[NSNumber alloc] initWithInt:(int)[self.currentCard cardId]];
[viewedCardsArray addObject: cardIdObject];
[cardIdObject release];
}
したがって、このコードは実行され、リークするようではありません(Leaksパフォーマンスツールによる)。しかし、コードをステップ実行すると、CardIdObjectはに表示されます.CardsArray。
私はこれらの基本的な質問がObjCの初心者(私のような)にはかなり共通していることを知っています。
[super init]の結果を使用することを忘れないでください。これは、nilまたは別のオブジェクトを返すことができます。あなたの元の自己を返却したと仮定してはいけません。なぜなら、それがリリースされなかったときに解放され、死んだオブジェクトがさらに初期化されると、クラッシュが発生するからです。最も簡単な方法はif((self = [super init])){/ *ここで初期化する* /} selfを返すことです。 (自分のスタイルの好みに合わせて、必要に応じて条件の前に割り当てることができます)。 –
私はその行をself = [super init]にすることを意味していました。しかし、はい、それはより良いアプローチです –
皆さんに助けていただきありがとうございます。私は今、クラス宣言と変数のインスタンス化の違いを感謝します! – pchap10k