0

Objective-C の Xcode 4.5.1 で作業しています。私は聴力検査を行っており、各質問に関連するデータを配列に保存したいと考えています。シングルトン MyManager を作成しました。これを使ってデータを保存しています。

単純な int/float 値などでは問題なく動作していますが、NSMutableArray を使用しようとして行き詰まりました。私はObjective-Cを初めて使用するので、明らかな間違いを犯したと想定/期待しています。

したがって、mySNRArray に float 値を入力したいと思います。オブジェクトしか取得できないため、フロートを単純に追加できないことを理解するようになりました。したがって、私は NSNumber を使用します。

問題: NSMutableArray に追加したはずのデータを読み取ろうとすると、(null) が返されます。

関連するコードを提供します。

MyManager.h

@interface MyManager : NSObject
{

NSMutableArray *mySNRArray;

}

@property (readwrite) NSMutableArray *mySNRArray;

+ (id)sharedManager;

@end

MyManager.m

@implementation MyManager

@synthesize mySNRArray;

+ (id)sharedManager
{
static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^
    {

            sharedMyManager = [[self alloc] init];

    });

return sharedMyManager;
}

- (id)init
{
if (self = [super init])
{

    NSMutableArray *mySNRArray = [[NSMutableArray alloc]init];

}

return self;
}

@end

TestViewController.m

//First, I try to add a value to mySNRArray.

MyManager *Manager = [MyManager sharedManager];

NSNumber *tempStorage1 = [[NSNumber alloc] initWithFloat:mySNR];

[Manager.mySNRArray insertObject:tempStorage1 atIndex:questionNumber];

//The NSLog below is showing the correct value.

NSLog(@"%@ : mySNR", tempStorage1);


...


for (n = 0; n < questionNumber; n++)
{

//Second, I try to acces the values I supposedly added to mySNRArray. 

MyManager *Manager = [MyManager sharedManager];

//This NSLog below is showing (null).

NSLog(@"Value at %i in SNRArray = %@", n, [Manager.mySNRArray objectAtIndex:n]);

}


...

誰かが私のエラーを説明してくれることを願っています。

4

3 に答える 3

3

変化する

NSMutableArray *mySNRArray = [[NSMutableArray alloc]init];

self->_mySNRArray = [[NSMutableArray alloc]init];

init メソッドでは、ローカルの可変配列を作成していますが、それをプロパティに割り当てていません

于 2012-12-12T12:07:34.147 に答える
0

init新しいオブジェクトを作成する代わりに、メソッドで作成した ivar を使用します。

_mySNRArray = [[NSMutableArray alloc]init];

.h からこれらを省略することもできます

{

NSMutableArray *mySNRArray;

}
于 2012-12-12T12:14:43.333 に答える
0
+ (id)sharedManager

値を返します

static MyManager* sharedManager

インターフェイスを次のように変更します

+ (MyManager*)sharedManager

コンパイラは、あなたが犯した間違いを正確に教えてくれます。

于 2014-04-09T13:29:59.840 に答える