2016-04-19 12 views
9

मुझे सार्वजनिक क्लाउडकिट डेटाबेस में सदस्यता बनाने में कोई समस्या है। पहले iCloud उपयोगकर्ता के लिए सदस्यता सहेजते समय कोड ठीक काम करता है लेकिन दूसरे iCloud उपयोगकर्ता के लिए एक ही रिकॉर्ड प्रकार के खिलाफ थोड़ा अलग सदस्यता सहेजने का प्रयास करने में विफल रहता है।प्रत्येक iCloud उपयोगकर्ता क्लाउडकिट में उपयोगकर्ता विशिष्ट सदस्यता कैसे सहेज सकता है?

यहाँ कोड है कि सदस्यता बचाता है (स्विफ्ट में जवाब भी ठीक कर रहे हैं):

CKNotificationInfo *info = [[CKNotificationInfo alloc] init]; 
info.shouldSendContentAvailable = YES; 

CKReference *ref = [[CKReference alloc] initWithRecordID:_ckUserID action:CKReferenceActionNone]; 
NSPredicate *pred = [NSPredicate predicateWithFormat:@"user == %@", ref]; 
NSString *subId = [NSString stringWithFormat:@"access-%@", _ckUserID.recordName]; 

CKSubscription *sub = [[CKSubscription alloc] initWithRecordType:@"access" predicate:pred subscriptionID:subId options:CKSubscriptionOptionsFiresOnRecordCreation | CKSubscriptionOptionsFiresOnRecordUpdate | CKSubscriptionOptionsFiresOnRecordDeletion]; 
sub.zoneID = [CKRecordZone defaultRecordZone].zoneID; 
sub.notificationInfo = info; 

CKModifySubscriptionsOperation *op = [[CKModifySubscriptionsOperation alloc] initWithSubscriptionsToSave:@[ sub ] subscriptionIDsToDelete:nil]; 
op.modifySubscriptionsCompletionBlock = ^(NSArray<CKSubscription *> *savedSubscriptions, NSArray<NSString *> *deletedSubscriptionIDs, NSError *operationError) { 
    if (operationError) { 
     RMLogError(@"Error trying to update user's access subscription: %@", operationError); 
    } else { 
     RMLogInfo(@"User access subscription added"); 
    } 
}; 
[_ckdatabase addOperation:op]; 

_ckUserID एक CKRecordID वर्तमान iCloud उपयोगकर्ता को दर्शाने वाली है।
_ckdatbase वर्तमान क्लाउडकिट कंटेनर के सार्वजनिक डेटाबेस के संदर्भ में CKDatabase है।

जब यह कोड उपयोगकर्ता ए के साथ डिवाइस ए पर चलाया जाता है, तो सदस्यता केवल ठीक से सहेजी जाती है।

2016-04-19 11: 38: 42: 504 MyApp [560

इस कोड को तो उपयोगकर्ता B के साथ डिवाइस बी पर चलाया जाता है, सदस्यता लॉग में निम्न संदेश के साथ विफल: f03] उपयोगकर्ता की पहुंच सदस्यता अपडेट करने का प्रयास करने में त्रुटि: < CKError 0x147830530: "आंशिक विफलता" (2/1011); "कुछ सदस्यता संशोधित करने में विफल"; uuid = 98E9F99A-C4F6-4488-8087-45285A7C1DB1; कंटेनर आईडी = "iCloud.com.blah.MyApp"; आंशिक त्रुटियां: { access-_df09e8908eeb9b9f12ebbe935e389d51 = < सीकेईआर 0x14664b4e0: "अज्ञात आइटम" (11/2003); सर्वर संदेश = "आवश्यक रिकॉर्ड प्रकार नहीं मिला: _sub_trigger_sub_08b399dc1448e58993a967b704a07ee0"> }>

access रिकॉर्ड प्रकार एक user क्षेत्र है कि एक CKRecordID एक iCloud प्रयोक्ता आईडी का प्रतिनिधित्व करने के लिए एक संदर्भ है।

मेरा लक्ष्य यहां प्रत्येक उपयोगकर्ता के लिए सदस्यता होना है जो ऐप को यह जानने की अनुमति देता है कि जब भी वर्तमान उपयोगकर्ता के लिए विशिष्ट रिकॉर्ड जोड़ा जाता है, अपडेट किया जाता है या हटा दिया जाता है।

इस रिकॉर्ड प्रकार के लिए, दूसरे उपयोगकर्ता से दूसरी सदस्यता क्यों नहीं सहेज सकता? मैं उपयोगकर्ता आईडी पर आधारित प्रत्येक सदस्यता को अपनी अनूठी आईडी भी दे रहा हूं।

+0

क्या दोनों डिवाइस क्लाउडकिट पर्यावरण के विकास का उपयोग कर रहे हैं? क्या यह संभव है कि एक डिवाइस ने उत्पादन वातावरण का उपयोग करने का निर्णय लिया है और आपने उत्पादन के लिए अपने रिकॉर्ड प्रकार आदि को तैनात नहीं किया है? –

+0

दोनों एक ही विकास डेटाबेस को मार रहे हैं। दोनों एक ही डेटा देखते हैं। – rmaddy

उत्तर

4

मैंने इस समस्या को दोहराने के लिए एक सरल परीक्षण ऐप बनाया और निश्चित रूप से यह मेरे परीक्षण ऐप में ठीक काम करता है।

मैं अपने असली ऐप पर वापस गया और कुछ खोदने के बाद मुझे यह समस्या हल हो गई। मैंने दो चीजें की:

  1. क्लाउडकिट डैशबोर्ड में मैंने सभी मौजूदा सदस्यता प्रकार हटा दिए।
  2. मैंने अपने कोड में एक बग तय किया जहां मैं गलती से सब्सक्रिप्शन zoneID को defaultRecordZone पर सेट कर रहा था। हालांकि पोस्ट की गई समस्या से वास्तव में संबंधित नहीं है, लेकिन यह बग अधिसूचनाओं तक पहुंचने से अधिसूचनाओं को रोक रहा था जब तक कि डिवाइस को उसी iCloud खाते में लॉग इन नहीं किया गया था जो रिकॉर्ड को जोड़ने/अपडेट/हटाने के लिए उपयोग किया जाता था।

असल में यह कुछ अजीब त्रुटि थी जिसे डैशबोर्ड में कुछ चीजों को रीसेट करके और ऐप को पुनरारंभ करके तय किया गया था।

संबंधित मुद्दे