2015-07-09 5 views
8

दिखा रहा है मेरे पास NSUserActivity की userInfo प्रॉपर्टी के बारे में एक त्वरित सवाल था।आईओएस 9 - एनएसयूसर एक्टिविटी userinfo संपत्ति शून्य

NSString *activity = @"com.test.activity"; 
NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:activity]; 
userActivity.title = @"Test"; 
userActivity.keywords = [NSSet setWithArray:@[@"Test"]; 
userActivity.userInfo = @{@"location": location}; 

userActivity.eligibleForSearch = YES;  
self.userActivity = userActivity; 
[self.userActivity becomeCurrent]; 

मेरे पास उपरोक्त स्निपेट दृश्य नियंत्रकों को देखने में सक्षम हैडिडलोड()। जब मेरा आइटम स्पॉटलाइट खोज के भीतर प्रकट होता है तो यह निरंतर उपयोगकर्ता सक्रियता प्रतिनिधि विधि को कॉल करता है।

मैं userActivity.userInfo प्रॉपर्टी तक पहुंचने का प्रयास कर रहा हूं लेकिन यह ऊपर की ओर सेट होने के बावजूद शून्य हो रहा है।

-(BOOL)application:(nonnull UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * __nullable))restorationHandler { 

NSString *locationName = [[userActivity.userInfo objectForKey:@"location"] valueForKey: @"name"]; 

// Do stuff with locationName 

return NO; 

}

संपादित करें:

यहाँ continueUserActivity स्निपेट मैं एक आदिम प्रकार के रूप में वापस जाने के लिए स्थान वस्तु बदल लेकिन मैं अभी भी प्रतिनिधि पद्धति पर अशक्त हो रही है।

क्या किसी और को आईओएस 9 बीटा 3 में यह समस्या है?

उत्तर

9

के रूप में ठीक काम कर रहा है मैं में आईओएस 9 बीटा 5 काम कर रहा हूँ, और एक और तरीका userInfoapplication:continueUserActivity:restorationHandler: भीतर नहीं के बराबर हो सकता है कि अगर आप भी NSUserActivity के webPageURL गुण सेट किया है। यदि आप webPageURL संपत्ति सेट करते हैं और userInfo चाहते हैं तो शून्य न होने के लिए, आपको NSUserActivity की requiredUserInfoKeys संपत्ति में उपयुक्त कुंजी शामिल करने की आवश्यकता होगी। यह मुझे हमेशा पता लगाने के लिए ले गया, लेकिन दस्तावेज़ों में इसे खोने के लिए मुझ पर शर्म की बात है।

NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:activityType]; 
activity.title = @"title"; 
activity.webpageURL = [NSURL URLWithString:webLinkUrlString]; 
activity.userInfo = @{@"id": webLinkUrlString, @"deep_link": deepLinkUrl}; 
// set requiredUserInfoKeys if you're also setting webPageURL !! 
// otherwise, userInfo will be nil !! 
activity.requiredUserInfoKeys = [NSSet setWithArrays:@[@"id", @"deep_link"]]; 
activity.eligibleForSearch = YES; 
activity.eligibleForPublicIndexing = YES; 
activity.contentAttributeSet = attributeSet; 
activity.keywords = [NSSet setWithArray:keywordsArray]; 
self.activity = activity; 
[self.activity becomeCurrent]; 
+1

मैं लगभग बिल्कुल ऐसा कर रहा हूं, और यह सिम्युलेटर या डिवाइस पर एक्सकोड 7 बीटा 6 में मेरे लिए काम नहीं कर रहा है। UserInfo शब्दकोश हमेशा खाली रहता है। यह आपके लिए काम करता है? – bdmontz

2

हाय आप अपने continueUserActivity स्निपेट में जांच कर सकता है:

if ([userActivity.activityType isEqualToString:@"com.test.activity"]) 
{ 
     NSString *locationName = [[userActivity.userInfo objectForKey:@"location"] valueForKey: @"name"]; 
} 

यह वहाँ जाना नहीं है, तो मुझे लगता है आप कोर स्पॉटलाइट अपने अनुप्रयोग में एकीकृत है और आप बिल्कुल कोर स्पॉटलाइट से इन तत्वों द्वारा स्पॉटलाइट में मिलता है ।

आशा है कि यह सहायक होगा।

पीएस फिलहाल (एक्सकोड 7 बीटा 3) कई डेवलपर्स एनएसयूसर एक्टिविटी के माध्यम से मुझे काम करने के लिए खोज एपीआई नहीं मिल सकते हैं।

0

यह बीटा 3 के साथ एक समस्या थी जो इस त्रुटि का कारण बन रही थी। सब कुछ बीटा 5.

0

इस सवाल देखें:

कुशलतापूर्वक गतिविधि वस्तु की userInfo शब्दकोश अद्यतन करने के लिए, अपने प्रतिनिधि कॉन्फ़िगर और सेट: NSUserActivity handoff not working for custom data

userInfo में गैर-शून्य अगर आप एप्पल से इस निर्देश का पालन करें इसकी ज़रूरतें जब भी userInfo को अपडेट करने की आवश्यकता होती है तो हाँ को संपत्ति सहेजें। उचित समय पर, हैंडऑफ़ प्रतिनिधि के उपयोगकर्ता को आमंत्रित करता है एक्टिविटीविल्लसेव: कॉलबैक, और प्रतिनिधि गतिविधि स्थिति अपडेट कर सकते हैं।

दस्तावेज़ कहता है कि webpageURL सेटिंग की आवश्यकता है कि आवश्यक यूज़रइन्फोइज़ भी सेट हो जाएं। हालांकि (ए) हैंडऑफ जरूरी काम करता है बिना यूजरइन्फोइज़, जब तक 'userActivityWillSave' userInfo सेट करता है, और (बी) webURL एक आईओएस 8 पैरामीटर है, जबकि आवश्यक यूसरइन्फोइज़ आईओएस 9 है। इसलिए प्रतिनिधि विधि आईओएस 8/एक्सकोड 6।

0

मैं (सिम्युलेटर में) देखा है कि आप सेट कर सकते हैं कि या तो:

  • वेबपेज URL
  • userInfo और requiredUserInfoKeys

लेकिन दोनों नहीं! यदि आप आवश्यक यूज़रइन्फोइज़ के साथ एक webpageURL और userInfo दोनों सेट करते हैं, तो आपकी गतिविधि आईओएस पर स्पॉटलाइट में भी दिखाई नहीं देगी। मुझे लगता है कि ऐसा इसलिए है क्योंकि ऐप्पल मानता है कि यदि आप वेबपृष्ठ URL सेट करते हैं जिसे आप सार्वभौमिक लिंक का समर्थन करते हैं और इस प्रकार किसी अतिरिक्त उपयोगकर्ता जानकारी की आवश्यकता नहीं है।

हालांकि, यह वेबपृष्ठ और केवल उपयोगकर्ताइन्फो दोनों सेट करना ठीक है, लेकिन आपके ऐप प्रतिनिधि में आपको userInfo प्राप्त नहीं होगा।

0

मुझे वही समस्या थी जो UserInfo शून्य था (आईओएस 9.2 पर)। समस्या यह थी कि खोज परिणाम नवीनतम एनएसयूसर एक्टिविटी नहीं था जिसे मैंने टैप किया है (पुराने उपयोगकर्ता के साथ कोई भी उपयोगकर्ता नहीं)। इसलिए मैंने सही खोज परिणाम स्पष्ट रूप से पहचानने के लिए शीर्षक का नाम बदल दिया।

शायद यह किसी को भी मदद करता है।