2012-02-24 10 views
-1

NSNumberが有効範囲外とみなされている理由を把握できません。ここに私のコードの簡易版である:NSNumberが有効範囲外です

viewController.m

NSNumber *mean; 
[statistics calculateMean:mean]; 
NSLog(@"%@ is the mean", mean); 
//^on this line I get the error: "Program received signal: “EXC_BAD_ACCESS”." 
//and when I hover over object it says "out of scope". 

statistics.m

+ (void)calculateMean:(NSNumber*)MeanEst 
{ 
    MeanEst = [stepFunc meanOfArray:sub_values]; 
    //meanOfArray returns an NSNumber* 
} 

は、任意の助けいただければ幸いです!

EDIT:私はmatlabコードをobjective-cに移植しています。 MATLABコードは、私が書かなかったコードであり、私は実際にこの目的コードを使用しません。それは誰かのためのプロジェクトです。だから私は可能な限り、MATLABコードに似ている方法でそれを記述しようとしています。 matlabコードでは、function [mean_est、sig] = mean_est(candEventTimes)と定義された関数があります。私は2つのオブジェクトを返すことができないので、私はポインタとしてそれらを渡し、本質的に同じことを達成することを望んでいた。

+0

をポインタへのポインタを渡す必要があります。それは自動リリースされたものです。またはNSNumberを使用することができます*平均= [[stepFunc meanOfArray:sub_values]保持];使用後に使用してください。 – Ravin

+0

NSNumberのプロパティとシンセサイザを宣言しましたか? – Radu

+0

あなたのNSNumberオブジェクトはおそらくどこかで解放されています。追跡してください。 (自動リリースされるかもしれません) – sElanthiraiyan

答えて

1

NSNumberはプリミティブ型ではないため、最初に初期化する必要があります。

NSNumber *mean = [NSNumber initWithFloat:0.0f]; 
[statistics calculateMean:mean]; 

これで、平均値に正しくアクセスできるはずです。また、実際にNSNumberオブジェクトを返すかどうかにかかわらず、meanOfArrayメソッドをチェックしてください。

+0

これは、@exolarisが探している結果を生成しません。 'calculateMean'の呼び出しの後、' mean'の値は変更されずに '0.0f'のままです。 – sch

1

あなたは平均オブジェクトを保持する必要があります

NSNumber *mean; 
[statistics calculateMean:&mean]; 
NSLog(@"%@ is the mean", mean); 

+ (void)calculateMean:(NSNumber **)MeanEst 
{ 
    *MeanEst = [stepFunc meanOfArray:sub_values]; 
    //meanOfArray returns an NSNumber* 
} 
+2

これは私がAskerが達成しようとしていることを信じていますが、これは一般的に悪いスタイルであることに注意してください(これはおそらくこの場合はそうではありません)。 –

+0

@ルーカス何がより良いスタイルになるだろうか(私はそれが失礼だと私はちょうど興味があると思うわけではない)。私はなぜNSMutableArraysでこれを簡単に行うことができるのか理解できませんが、NSNumbersではできません。それらはどちらもオブジェクトです。 – exolaris

+0

@exolaris - 私の答えをチェックしてください。ポインタを使ってその値を変更するのではなく、メソッドから値を返すことができると言いたいと思います。配列に関しては、パラメータとして渡すときに配列自体を変更するのではなく、その内容を変更するだけです。 – sch

関連する問題