2013-10-02 7 views
8

को पुनर्प्राप्त नहीं कर रहा है मुझे आईओएस 6 से आईओएस 7 में अपना कोरब्लूटूथ कोड अपडेट करने में कोई समस्या है। मैं पेरिफेरल्स के लिए स्कैन कर सकता हूं और कनेक्शन बना सकता हूं, हालांकि, मैं नए कोरब्लूटूथ विधियों का उपयोग करके परिधीय को दोबारा जोड़ने में सक्षम नहीं हूंआईओएस 7 कोरब्लूथ्रूट पुनर्प्राप्ति पेरिपिफेरसथिडेंटिफायर

- (void)retrievePeripheral:(NSString *)uuidString 
{ 

NSUUID *nsUUID = [[NSUUID UUID] initWithUUIDString:uuidString]; 

if(nsUUID) 
{   
    NSArray *peripheralArray = [centralManager retrievePeripheralsWithIdentifiers:@[nsUUID]]; 

    // Check for known Peripherals 
    if([peripheralArray count] > 0) 
    { 
     for(CBPeripheral *peripheral in peripheralArray) 
     { 
      NSLog(@"Connecting to Peripheral - %@", peripheral); 

      [self connectPeripheral:peripheral]; 
     } 
    } 
    // There are no known Peripherals so we check for connected Peripherals if any 
    else 
    { 
     CBUUID *cbUUID = [CBUUID UUIDWithNSUUID:nsUUID]; 

     NSArray *connectedPeripheralArray = [centralManager retrieveConnectedPeripheralsWithServices:@[cbUUID]]; 

     // If there are connected Peripherals 
     if([connectedPeripheralArray count] > 0) 
     { 
      for(CBPeripheral *peripheral in connectedPeripheralArray) 
      { 
       NSLog(@"Connecting to Peripheral - %@", peripheral); 

       [self connectPeripheral:peripheral]; 
      } 
     } 
     // Else there are no available Peripherals 
     else 
     { 
      // No Dice! 
      NSLog(@"There are no available Peripherals"); 
     } 
    } 
} 

} 

कहाँ uuidString बचाया परिधीय UUID है: आईओएस 7. भीतर यहाँ कैसे मैं पुनर्संयोजन पूरा करने के लिए कोशिश कर रहा हूँ पर एक नज़र है।

मैं हमेशा एनएसएलओजी स्टेटमेंट में जा रहा हूं जहां पेरिफेरल उपलब्ध नहीं हैं। मुझे लगता है कि मुझे कुछ बहुत याद आ रहा है और कोई मुझे सही दिशा में इंगित कर सकता है।

इसके अतिरिक्त, मैंने CoreBluetooth के साथ आईओएस 7 अपडेट मुद्दों के बारे में अन्य पोस्ट पढ़ी हैं और बीएलई डिवाइस और आईओएस डिवाइस को रीसेट करने का प्रयास किया है लेकिन इसका कोई फायदा नहीं हुआ है।

अग्रिम में धन्यवाद! श्रव्य

उत्तर

5

यह पता चला है कि मेरी गलती से मैं पेरिफेरल के पहचानकर्ता को NSString प्रारूप में परिवर्तित कर रहा था, जो मेरी पुनर्प्राप्ति पेरिफेरल विधि को संदेश भेजने से पहले था। करने के लिए एप्पल प्रलेखन NSUUID कक्षा टोल फ्री नहीं है अनुसार

NSString *uuidString = [NSString stringWithFormat:@"%@", [[peripheral identifier] UUIDString]]; 

:

NSString *uuidString = [NSString stringWithFormat:@"%@", CFUUIDCreateString(NULL, (__bridge CFUUIDRef)([peripheral identifier]))]; 

यह सही तरीका (है कि मेरी स्थिति में काम किया) था:

यह गलत रास्ता नहीं था CoreFoundation के CFUUIDRef के साथ नीचे वर्णित अनुसार:

नोट: NSUUID कक्षा कोरफॉउंडेशन के CFUUIDRef के साथ टोल-फ्री नहीं है। यदि आवश्यक हो तो CFUUID और NSUUID के बीच कनवर्ट करने के लिए यूयूआईडी स्ट्रिंग का उपयोग करें। दो NSUUID ऑब्जेक्ट्स पॉइंटर वैल्यू से तुलना करने योग्य नहीं हैं (CFUUIDRef है); दो NSUUID उदाहरणों की तुलना करने के लिए isEqual: का उपयोग करें।

<CBPeripheral: 0x14699430 identifier = DD2468AB-1865-B926-7FA4-AE3755D479D8, Name = "IDYNAMO EMV-A27F", state = disconnected> 

गलत रास्ता:

जो इसका मतलब क्या है कि मैं यहाँ का एक दृश्य प्रतिनिधित्व की तरह आप के उन लोगों के लिए एक उदाहरण :)

परिधीय जानकारी कंसोल में मुद्रित है एक NSString पैदावार में परिधीय के पहचानकर्ता परिवर्तित करने की:

1865B926-7FA4-AE37-55D4-79D800000000 

टी वह एक NSString पैदावार में परिधीय के पहचानकर्ता परिवर्तित करने का सही तरीका:

DD2468AB-1865-B926-7FA4-AE3755D479D8 

मुझे आशा है कि यह उनकी BLE यात्रा पर कोई मदद करता है और मुझे सही करने के लिए अगर मैं मैं अभी भी रूप में इस चीज सीख रहा हूँ के रूप में किसी भी तरह से गलत हूँ के लिए स्वतंत्र महसूस कुंआ।

धन्यवाद!

श्रव्य

+0

अगर तुम मुझे मेरे कोड के साथ मदद कर सकते हैं retrievePeripheralsWithIdentifiers कन्वर्ट करने के लिए मैं सोच रहा हूँ - (शून्य) centralManager: (CBCentralManager *) केंद्रीय didDiscoverPeripheral: (CBPeripheral *) aPeripheral advertisementData: (NSDictionary *) advertisementData आरएसएसआई: (एनएसएनंबर *) आरएसएसआई { एनएसएमयूटेबलएरे * परिधीय = [स्वयं परिवर्तनीयअरेवैल्यूफोरकी: @ "दिलराट मॉनिटर"]; अगर (! [Self.heartRateMonitors शामिल है ऑब्जेक्ट: एपीरिफेरल]) [परिधीय addObject: aPeripheral]; [self.manager पुनर्प्राप्ति पेरिफेरल्स: [NSArray arrayWithObject: (id) aPeripheral.UUID]]; } –

1

यह एक पुरानी पोस्ट है, लेकिन दूसरों के लिए जवाब की तलाश में।

कनेक्टेड पेरिफेरल्स को पुनः प्राप्त करने के लिए दूसरी/अगली कॉल वास्तव में सेवा यूयूआईडी (सीबीयूयूआईडी प्रकार) की आवश्यकता है, आईओएस पहली बार कनेक्ट-एनएसयूयूआईडी नहीं। पुनर्प्राप्त किया गया एक सूची ओच परिधीय है जिसमें उस सेवा को यूयूआईडी लागू किया गया है। उदाहरण के लिए यदि आपके पास कई गतिविधियां हैं और सभी चीजों के साथ आपकी आवश्यक दिल की धड़कन सेवा है, तो आप सभी 3 परिधीय पुनर्प्राप्त करेंगे। इसके अलावा, ज्ञात परिधीय को पहली बार कॉल करने के लिए, आपको एएसयूयूआईडी को एप शुरू करने के बीच स्टोर करना होगा क्योंकि आईओएस द्वारा पहले कनेक्ट पर आईडी बनाई गई है। आशा है कि मदद करता है