2016-09-22 8 views
0

誰でも "Beacon is IOS10でクラッシュする"を修正するのを手伝ってください。IOSのビーコンクラッシュ10

-(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#> 
    } 


} 

を次のようにデリゲートメソッドは常にゼロとコードとしてビーコンの配列を返すdidRangeBeaconsは、Bluetoothは、デバイスで有効になっている、私は、次のリンク Ranging Beacons in iOS 10に指定されているデプロイメント・ターゲットを変更することによって試みました。そして配列のnil条件がチェックされ、コード全体が客観的なcのtry catchで囲まれていたが、 "Beacon array is nil"と言ってアプリがクラッシュしても。 IOS10はビーコンをサポートしていますか?助けを前にありがとう。

答えて

1

iOS 10でビーコン検出の問題に関する逸話的な報告が多数あり、一部のユーザーはのXCodeでアプリの展開ターゲットを9.xに設定すると問題を解決すると報告しています。詳細はこちらをご覧ください:

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

+0

こんにちは、返事をありがとう。確認してお知らせします – Sakthimuthiah

+0

展開ターゲットを変更しようとしました。残念ながら、それは動作しません – Sakthimuthiah

+0

あなたはこれのための解決策を見つけましたか?私は同じ問題をhaev – vivianaranha