【问题标题】:Cannot store iBeacon RSSI values in an array无法将 iBeacon RSSI 值存储在数组中
【发布时间】:2014-11-16 00:48:37
【问题描述】:

在运行期间尝试将所有 RSSI 值存储在 NSMutablearray 中,然后最终输出到控制台。已将 x 的值更改为 20000 以查看 RSSI 的值是否有任何变化......不幸的是,没有变化 - Xcode 报告在代码开头读取的 RSSI 的 20000 值(不确定这是否是采样问题或?)。任何帮助将不胜感激。

rssiArray = [[NSMutableArray alloc] init];
long newBeacon = 0;
if (beacon.rssi == newBeacon)
{

    newBeacon = beacon.rssi;
}

    else
    {
        for (int x = 0; x < 1; x++) {
            [rssiArray addObject:[NSString stringWithFormat:@"%d", x]];
            [rssiArray addObject:@(beacon.rssi)];
        }

    }
//Send array to console
NSLog (@"%@", [self rssiArray]);

数组在同一个文件的顶部合成,如下所示:

#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
#import "DetailViewController.h"

@interface ViewController ()
{

}

@end

@implementation ViewController
@synthesize rssiArray;

这里的ViewController.h中也定义了数组:

//array for storing RSSI values
@property (strong, nonatomic) NSMutableArray *rssiArray;

@PaulW

所以……

  1. 像这样在 ViewController.m 中初始化数组:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        rssiArray = [[NSMutableArray alloc] initWithObjects:nil];
    }
    
  2. 将以下代码粘贴到 AppDelegate.m 中的 didRangeBeacons 方法中,如下所示...

        for (int x = 0; x < 500; x++) {
                [rssiArray addObject:[NSString stringWithFormat:@"%d", x]];
                [rssiArray addObject:@(NOTSUREWHATGOESHERE???..WANT TO STORE RSSI)];
            }
    
        //Send array to console
        NSLog (@"%@", [self rssiArray]);
    

【问题讨论】:

  • rssiArray 的声明是否显示在上下文中? IE。每次执行此方法时,您是否重新初始化rssiArray?如果是这样,那是你的问题。如果没有,请在上下文中显示您的完整方法和数组声明
  • @Paulw11 - 代码已更新以反映您的问题。提前谢谢你。
  • 看来您每次都在初始化数组。这意味着您将有效地丢弃以前的值。这段代码在didRangeBeacons 中吗?
  • @Paulw11 - Gotchya。可能需要帮助来判断这是否正在完成。以上代码均不在 didRangeBeacons 内。应该是吗?上述代码的循环位于 ViewController.m 中。想法?
  • 这就是为什么它有助于在上下文中查看代码 - 带有方法名称。您应该在 viewDidLoad 中初始化数组并在 didRangeBeacons 中添加它。

标签: ios xcode bluetooth ibeacon rssi


【解决方案1】:

只存储 rssi 的简单方法是 -

- (void)locationManager:(CLLocationManager *)manager
        didRangeBeacons:(NSArray *)beacons
               inRegion:(CLBeaconRegion *)region {

    for (CLBeacon *beacon in beacons) {
        [self.rssiArray addObject:[NSNumber numberWithInteger:beacon.rssi]];
    }
}

我说这种方法过于简单的原因是它只是将 rssi 值存储到一个数组中,而不管它们来自哪个信标 - 只要您一次只测距一个信标,这不会是问题。

顺便说一句,您不再需要@synthesize 指令,您应该养成通过self 引用属性而不是访问底层iVar 的习惯(如果您删除@synthesize,则为_rssiArray )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多