Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSN编号超出范围_Iphone_Objective C_Ios_Nsnumber - Fatal编程技术网

Iphone NSN编号超出范围

Iphone NSN编号超出范围,iphone,objective-c,ios,nsnumber,Iphone,Objective C,Ios,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

我很难弄清楚为什么我的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".
统计学

+ (void)calculateMean:(NSNumber*)MeanEst
{
    MeanEst = [stepFunc meanOfArray:sub_values]; 
    //meanOfArray returns an NSNumber*
}
任何帮助都将不胜感激


编辑:我正在将matlab代码移植到objective-c。matlab代码是我没有编写的代码,我不会真正使用这个objective-c代码。这是另一个人的项目。因此,我试图以一种尽可能类似于matlab代码的方式编写它。在matlab代码中,有一个函数定义为“函数[mean_est,sig]=mean_est(candEventTimes)”。因为我不能返回两个对象,所以我希望将它们作为指针传入,并完成基本相同的任务。

因为NSNumber不是一个基本类型,所以必须首先初始化它

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

现在您应该能够正确地访问平均值。还要检查meanOfArray方法是否真的返回NSNumber对象。

您应该将指针传递给指针

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


您将需要保留平均对象。因为它是自动发布的。或者您可以使用NSNumber*mean=[[stepFunc meanOfArray:sub_值]retain];使用它并在使用后释放。@exolaris-您在代码中使用的名称非常混乱,您能否发布完整的代码,或者至少解释一下
statistics
stepFunc
是什么?@exolaris-您可以在一个类中编写多个函数(方法),您不需要为每个方法都使用一个类。@exolaris在这个函数中,您试图返回的两件事是什么?它可能仅仅是两个可以在两个不同的方法中返回的值吗?@exolaris:您总是可以创建一个包含两个值的对象,并从您的函数(方法)返回if。这比通过引用调用带有参数的方法要好得多。我相信询问者正试图做到这一点,但是应该注意的是,在没有必要的情况下,这通常是一种糟糕的风格(在本例中可能不是这样)。@Lucas哪种风格更好(我不是说这听起来粗鲁,我只是好奇)。我不明白为什么我可以用NSMutableArray轻松做到这一点,但用NSNumbers却不行。。它们都是对象。@exolaris-检查我的答案,我想他想说的是,您可以从方法返回值,而不是使用指针修改其值。关于数组,当你将数组作为参数传递时,你不是在修改数组本身,你只是在修改它的内容。@exolaris我的意思是你通常不会在Obj-C中通过引用传递对象,因为它通常是不需要的。也许如果我能更好地理解你的最终目标,我可以解释一个更好的选择。@Lucas——如果你不通过引用传递一个对象,你如何传递它??我想你的意思是,你通常不会通过引用传递指针。这不会产生@exolaris想要的结果。调用
calculateMean
后,
mean
的值将保持不变:
0.0f
+ (void)calculateMean:(NSNumber **)MeanEst
{
    *MeanEst = [stepFunc meanOfArray:sub_values]; 
    //meanOfArray returns an NSNumber*
}