Как создать динамику CLBeaconRegion на iOS, Ibeacon - PullRequest
0 голосов
/ 14 мая 2018

У меня есть информация (Uuid, Major, Minor) о двух маяках в моей БД, и я хочу создать два CLBeaconRegion, но динамически, потому что есть возможность добавить больше маяков и создать больше CLBeaconRegion, у меня есть этот код:

          for i in 0 ... self.ArrayBeaconIDs.count-1 {
          let beaconRegion = CLBeaconRegion(

                proximityUUID: UUID(uuidString: self.ArrayBeaconIDs[i])!,
                major:  CLBeaconMajorValue(self.ArrayMajor[i])! ,minor:CLBeaconMajorValue(self.ArrayMinor[i])!
                , identifier: "teuchlitlan"
            )
            self.ArrayRegiones.append(beaconRegion)
        }
        for i in 0 ... self.ArrayRegiones.count-1 {
            self.ArrayRegiones[i].notifyEntryStateOnDisplay = true
            self.ArrayRegiones[i].notifyOnEntry = true
            self.ArrayRegiones[i].notifyOnExit = true

            self.beaconManager.startMonitoring(for: self.ArrayRegiones[i])
            self.beaconManager.startRangingBeacons(in: self.ArrayRegiones[i])
            self.beaconManager.requestState(for: self.ArrayRegiones[i])
        }

, но определить только последнюю область в массиве. Как я могу ее решить?

1 Ответ

0 голосов
/ 14 мая 2018

При ранжировании или мониторинге нескольких областей в поле identifier должна быть задана уникальная строка, так как это ключ, используемый для запуска, остановки и замены контролируемой области.Если вы попытаетесь контролировать или ранжировать две разные области с одинаковым значением поля identifier, вы фактически замените предыдущую регистрацию региона новой, имеющей такое же значение identifier.

Чтобы исправить это в своемВ этом случае просто измените значение identifier на уникальную строку.Вы можете сгенерировать один из них следующим образом:

OLD:

proximityUUID: UUID(uuidString: self.ArrayBeaconIDs[i])!,
                         major:  CLBeaconMajorValue(self.ArrayMajor[i])!,
                         minor:CLBeaconMajorValue(self.ArrayMinor[i])!, 
                         identifier: "teuchlitlan"

NEW:

proximityUUID: UUID(uuidString: self.ArrayBeaconIDs[i])!,
                         major:  CLBeaconMajorValue(self.ArrayMajor[i])!,
                         minor:CLBeaconMajorValue(self.ArrayMinor[i])!, 
                         identifier: "teuchlitlan\(i)"

Второй фрагмент кода добавит числовой суффикс к каждому региону identifierтаковы они:

teuchlitlan0, teuchlitlan1, teuchlitlan2 ... и т. д.

...