无法将iBeacon RSSI值存储在数组中

时间:2014-11-16 00:48:38

标签: ios xcode bluetooth ibeacon rssi

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

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]);
    

1 个答案:

答案 0 :(得分:0)

只存储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(如果是_rssiArray你删除了@synthesize