我试图找到使用 NSTimer 函数定期插入到数组中的 10 个信号强度值的平均值。由于控制台日志,我知道计时器正在工作,但 10 个值的数组没有。代码中是否存在小错误或 if/else 语句可能存在问题?
- (IBAction)getSignalAvg:(id)sender {
myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(arrayBuild)
userInfo:nil
repeats:YES];
}
- (void)arrayBuild {
loopCount++;
// Initialise Array
NSMutableArray *resultsArray = [[NSMutableArray alloc]init];
if (loopCount >= 11) {
// Invalidate Timer
[myTimer invalidate];
myTimer = nil;
// Find Average
NSNumber *avg = [resultsArray valueForKeyPath:@"@avg.self"];
// Change Text of Label to Average & Log
self.avgSignal.text = [NSString stringWithFormat:@"%@",avg];
NSLog(@"%@",avg);
}else{
// Declare Signal Strength
float signalstrength = CTGetSignalStrength();
// Individual Result & Convert to Integer
NSString *result = [NSString stringWithFormat:@"%f", signalstrength];
NSInteger resultInt = [result integerValue];
// Add Object
[resultsArray addObject:[NSNumber numberWithFloat:resultInt]];
// Change Text of Label Each Second
self.avgSignal.text = [NSString stringWithFormat:@"%d",loopCount];
NSLog(@"%f",signalstrength);
}
}
最佳答案
每次调用 arrayBuild
方法时,您都会创建一个新的 NSMutableArray
,因此其中只有一个值。
您需要为 NSMutableArray
resultsArray
创建一个类实例。只需在此类的 .h
文件中声明一个属性,例如:
@property (nonatomic, strong) NSMutableArray *resultsArray;
在类的 init
中:
- (instancetype)init{
self = [super init];
if (self) {
_resultsArray = [[NSMutableArray alloc]init];
}
return self;
}
并在 arrayBuild
中删除 NSMutableArray *resultsArray = [[NSMutableArray alloc]init];
并使用 self.resultsArray
instate of 结果数组
。
关于ios - 如何在 Objective-C 中的数组中找到 10 个值的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25360828/