gpt4 book ai didi

ios - IOS 10 中的 Beacon 崩溃

转载 作者:行者123 更新时间:2023-11-29 00:40:26 26 4
gpt4 key购买 nike

任何人请帮助我们解决“Beacon 在 IOS10 中崩溃”的问题。 didRangeBeacons 委托(delegate)方法总是以 nil 形式返回 beacons 数组,代码如下

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

@try {

CLBeacon *beacon = [[CLBeacon alloc] init];

NSLog(@"beacons Count %lu", (unsigned long)beacons.count);


if(beacons != nil && beacons != Nil && beacons != NULL && beacons.count > 0) {

beacon = [beacons firstObject];

self.currentMajor = beacon.major;
self.currentMinor = beacon.minor;

NSArray *majorMinorIDs = [[NSArray alloc]initWithObjects:self.currentMajor,self.currentMinor, nil];
self.ComaSeparatedIDS = [majorMinorIDs componentsJoinedByString:@","];

/* Log */
[self printLog:[NSString stringWithFormat:@"Current Major Id: %@, Previous Major Id: %@, Current Minor Id: %@, Previous Minor Id %@", self.currentMajor, self.prevMajor, self.currentMinor, self.prevMinor]];

// Make a web service request only if new beacon is detected
if((([self.prevMajor intValue]!=[self.currentMajor intValue]) || ([self.prevMinor intValue]!=[self.currentMinor intValue])) || (self.enteredRegionNow))
{
NSLog(@"Making url request when new beacon detected");
// Delete all the urls before calling the web service
self.url_immediate = nil;
self.url_near = nil;
self.url_far = nil;
self.url_exit = nil;

// Make a web service request to the server
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://ibeacon.bpsqr.me/GetUrls/?UUID=%@&MinorID=%@&MajorID=%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"UUID"], self.currentMinor, self.currentMajor]]];
self.urlsRequestConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

self.prevMajor = self.currentMajor;
self.prevMinor = self.currentMinor;

self.enteredRegionNow = false;


return;
}

// Assigning beacon's current proximity
self.currentProximity = beacon.proximity;
[self printLog:[NSString stringWithFormat:@"Current proximity : %d", self.currentProximity]];
[self printLog:[NSString stringWithFormat:@"Previous proximity : %d", self.prevProximity]];
[self printLog:[NSString stringWithFormat:@"Last visited webpage proximity : %d", self.previousProximityTag]];

// Send notification based on the notification enabled flag, proximity and the url found in the response
if([self.notificationEnabled isEqualToString:@"true"])
{


double days = [self DiffBetweenCurrentAndNotificationDate];
NSLog(@"Days from notification %f",days);

NSNumber *notificationDuration =[[NSUserDefaults standardUserDefaults] objectForKey:@"NotificationDuration"];
NSLog(@"Notification duration from plist %f",[notificationDuration doubleValue]);


if (days >=[notificationDuration doubleValue] || days == 0 ) {

NSLog(@"Hit count become zero in differeneceBetweenCurrentAndNotificationDate");

hitCount = 0 ;
}

switch (beacon.proximity) {

case CLProximityUnknown:
// Do nothing
break;

case CLProximityImmediate:
if(self.url_immediate != nil)
{
[self sendLocalPushNotification];
self.notificationEnabled = false;



}
break;

case CLProximityNear:
if(self.url_near != nil)
{
[self sendLocalPushNotification];
self.notificationEnabled = false;


}
break;

case CLProximityFar:
if(self.url_far != nil)
{
[self sendLocalPushNotification];
self.notificationEnabled = false;


}
break;

default:
break;
}

}

// Open web page based on proximity when general beacons(not notification beacon) detected
if([self.status_code isEqualToString:@"200"])
{
// Do not open web page while app is in background
UIApplicationState appState = [[UIApplication sharedApplication] applicationState];
if((appState != UIApplicationStateBackground) && (appState != UIApplicationStateInactive))
{
if (beacon.proximity == CLProximityUnknown) {
if(self.currentProximity != self.prevProximity)
{
self.prevProximity = self.currentProximity;
}

/* Log */
[self printLog:@"Unknown proximity"];
}
else if (beacon.proximity == CLProximityImmediate) {

if((self.currentProximity != self.prevProximity) && (![self.current_url isEqualToString:self.url_immediate]))
{
if(self.currentProximity == self.previousProximityTag)
{
self.previousProximityTag = self.prevProximity;

if(self.flag_immediate == true)
{
if(navController != NULL)
{
[self stopTimerTask:self.timer_long];
self.timer_long = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(showAlertOnProximityChange:) userInfo:[NSNumber numberWithInt:1] repeats:NO];
}
else
{
[self stopPerformSelectorTask];
[self performSelector:@selector(openWebView:) withObject:self.url_immediate afterDelay:20.0];
}
}
else
{
if(navController != NULL)
{
[self stopTimerTask:self.timer_long];
self.timer_long = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(showAlertOnProximityChange:) userInfo:[NSNumber numberWithInt:1] repeats:NO];
}
else
{
[self stopPerformSelectorTask];
[self performSelector:@selector(openWebView:) withObject:self.url_immediate afterDelay:3.0];
}
}
}
else
{
self.previousProximityTag = self.prevProximity;

if(navController != NULL)
{
[self stopTimerTask:self.timer_short];
self.timer_short = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(showAlertOnProximityChange:) userInfo:[NSNumber numberWithInt:1] repeats:NO];
}
else
{
[self performSelector:@selector(openWebView:) withObject:self.url_immediate afterDelay:0.0];
}
}
self.prevProximity = self.currentProximity;
}
else if ([self.current_url isEqualToString:self.url_immediate])
{
self.prevProximity = self.currentProximity;
}
/* Log */
[self printLog:@"Immediate"];
}
else if (beacon.proximity == CLProximityNear) {

if((self.currentProximity != self.prevProximity) && (![self.current_url isEqualToString:self.url_near]))
{
if(self.currentProximity == self.previousProximityTag)
{
self.previousProximityTag = self.prevProximity;

if(self.flag_near == true)
{
if(navController != NULL)
{
[self stopTimerTask:self.timer_long];
self.timer_long = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(showAlertOnProximityChange:) userInfo:[NSNumber numberWithInt:2] repeats:NO];
}
else
{
[self stopPerformSelectorTask];
[self performSelector:@selector(openWebView:) withObject:self.url_near afterDelay:20.0];
}
}
else
{
if(navController != NULL)
{
[self stopTimerTask:self.timer_long];
self.timer_long = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(showAlertOnProximityChange:) userInfo:[NSNumber numberWithInt:2] repeats:NO];
}
else
{
[self stopPerformSelectorTask];
[self performSelector:@selector(openWebView:) withObject:self.url_near afterDelay:3.0];
}
}
}
else
{
self.previousProximityTag = self.prevProximity;

if(navController != NULL)
{
[self stopTimerTask:self.timer_short];
self.timer_short = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(showAlertOnProximityChange:) userInfo:[NSNumber numberWithInt:2] repeats:NO];
}
else
{
[self performSelector:@selector(openWebView:) withObject:self.url_near afterDelay:0.0];
}
}
self.prevProximity = self.currentProximity;
}
else if ([self.current_url isEqualToString:self.url_near])
{
self.prevProximity = self.currentProximity;
}
/* Log */
[self printLog:@"Near"];
}
else if (beacon.proximity == CLProximityFar) {

if((self.currentProximity != self.prevProximity) && (![self.current_url isEqualToString:self.url_far]))
{
if(self.currentProximity == self.previousProximityTag)
{
self.previousProximityTag = self.prevProximity;

if(self.flag_far == true)
{
if(navController != NULL)
{
[self stopTimerTask:self.timer_long];
self.timer_long = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(showAlertOnProximityChange:) userInfo:[NSNumber numberWithInt:3] repeats:NO];
}
else
{
[self stopPerformSelectorTask];
// [self saveFarBeaconProximityMessage];

[self performSelector:@selector(openWebView:) withObject:self.url_far afterDelay:20.0];
}
}
else
{
if(navController != NULL)
{
[self stopTimerTask:self.timer_long];
self.timer_long = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(x:) userInfo:[NSNumber numberWithInt:3] repeats:NO];
}
else
{
[self stopPerformSelectorTask];
// [self saveFarBeaconProximityMessage];

[self performSelector:@selector(openWebView:) withObject:self.url_far afterDelay:3.0];
}
}
}
else
{
self.previousProximityTag = self.prevProximity;

if(navController != NULL)
{
[self stopTimerTask:self.timer_short];
self.timer_short = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(showAlertOnProximityChange:) userInfo:[NSNumber numberWithInt:3] repeats:NO];
}
else
{
// [self saveFarBeaconProximityMessage];

[self performSelector:@selector(openWebView:) withObject:self.url_far afterDelay:0.0];
}
}
self.prevProximity = self.currentProximity;
}
else if ([self.current_url isEqualToString:self.url_far])
{

self.prevProximity = self.currentProximity;
}
/* Log */
// [self saveFarBeaconProximityMessage];

[self printLog:@"Far"];
}
}

}

} else {
[self printLog:@"Beacon is nil"];
return;
}

}
@catch (NSException *exception) {
// <#Handle an exception thrown in the @try block#>
}
@finally {
// <#Code that gets executed whether or not an exception is thrown#>
}


}

设备中启用了蓝牙,我已尝试通过更改以下链接中指定的部署目标 Ranging Beacons in iOS 10 .并且检查了数组 nil 条件,整个代码都被 try catch 包含在 objective-c 中,但即使应用程序通过说“Beacon array is nil”而崩溃。 IOS10支持Beacon吗?在此先感谢您的帮助。

最佳答案

有许多关于 iOS 10 上信标检测问题的轶事报告,一些用户报告说将 XCode 中的应用程序部署目标设置为 9.x 将解决该问题。请参阅此处了解详细信息:

https://stackoverflow.com/a/39641127/1461050

关于ios - IOS 10 中的 Beacon 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39640725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com