Xcode 7.3 में अद्यतन करने के बाद, यह Cannot create __weak reference in file using manual reference counting
पॉड फ़ाइलों में त्रुटि को फेंकता है । क्या किसी ने इस मुद्दे को हल किया है?
जवाबों:
को सेट Build Settings -> Apple LLVM 7.1 - Language - Objective C -> Weak References in Manual Retain Release
करें YES
।
Apple डेवलपर्स फ़ोरम से लिया गया - Xcode 7.3b4, गैर-चाप, __weak संदर्भ नहीं बना सकता है ।
यह लिंक से Apple का आधिकारिक उत्तर है:
यह समस्या निम्नलिखित के आधार पर व्यवहार करती है: हम सभी उद्देश्य-सी भाषा मोड में कमजोर संदर्भों को लागू करने की प्रक्रिया में हैं। चूंकि "__weak" को गैर-एआरसी (और गैर-जीसी) भाषा मोड में ऐतिहासिक रूप से अनदेखा किया गया है, इसलिए हमने इस त्रुटि को उन स्थानों को इंगित करने के लिए जोड़ा है जहां भविष्य में शब्दार्थ बदल जाएगा। कृपया अपनी बग रिपोर्ट अपडेट करें, हमें बताएं कि क्या यह अभी भी आपके लिए एक समस्या है।
इसलिए मूल रूप से, यदि आप तीसरी पार्टी लाइब्रेरी के लिए पॉड का उपयोग कर रहे हैं, तो आपको या तो गैर-एआरसी में __weak को हटाना होगा या अपडेट की प्रतीक्षा करनी होगी।
अपडेट करें 3/23
मुझे उन झंडों के बारे में अधिक शोध करना चाहिए जिन्हें मैं इन थोड़े सामानों को बायपास करने के लिए अनिवार्य रूप से पास कर सकता हूं। लेकिन मौलिक रूप से आपको __weak
किसी भी अप्रत्याशित संघर्ष से बचने के लिए अब से गैर-एआरसी मोड में उपयोग नहीं करना चाहिए । कोकोपोड्स उपयोगकर्ताओं के लिए, आपको __weak
अपडेट के लिए हटाने या प्रतीक्षा करने की आवश्यकता नहीं है लेकिन Weak References in Manual Retain Release
बिल्ड सेटिंग्स में ध्वज को यस की तरह सेट करें जैसे लीन ने कहा। उममीद है कि इससे मदद मिलेगी।
इसे हल करने का सबसे अच्छा तरीका post_install
अपने पॉडफाइल में एक स्क्रिप्ट जोड़ना है जो आपके सभी पॉड लक्ष्यों में Weak References in Manual Retain Release
ध्वज को सेट yes
करता है। ऐसा करने के लिए बस अपने नीचे दिए गए कोड को पेस्ट करें Podfile
।
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
end
end
end
कभी-कभी, ऐसा करने से त्रुटि होती है -fobjc-weak is not supported on the current deployment target
। आप एक और कॉन्फ़िगरेशन विकल्प जोड़कर हल कर सकते हैं, सभी पॉड्स को उस संस्करण को लक्षित करने के लिए मजबूर कर सकते हैं ( इस उत्तर के आधार पर ):
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.3'
end
end
end
FBSettings.m में फेसबुक कमजोर संदर्भों के लिए समाधान
पॉडफाइल के लिए, पॉड इंस्टॉल / अपडेट के बाद चलाने के लिए एक स्क्रिप्ट लिखना संभव है, निम्नलिखित का वर्णन करता है।
post_install do | installer |
classy_pods_target = installer.pods_project.targets.find {| target | target.name == 'Facebook-iOS-SDK'}
classy_pods_target.build_configurations.each do | config |
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
end
end
CLANG_ENABLE_OBJC_WEAK कैसे जादू के शब्दों को खोजने के लिए। ।
मुझे यह मिल गया है।
मुझे लगता है कि इसका मतलब __weak हटाना है
https://forums.developer.apple.com/thread/38934
एर्म, क्या एमआरआर [मैनुअल रिटेन-रिलीज] के तहत कमजोर चर संदर्भ के रूप में कभी ऐसा था? "__weak" का अर्थ एक या दो चीजों से है:
एक प्रसिद्ध संदर्भ (यानी एक प्रतिधारण का प्रतिनिधित्व नहीं)।
एक शून्य संदर्भ (यानी कि जब संदर्भित वस्तु को हटा दिया जाता है तो रनटाइम शून्य हो जाता है)।
# 1 MRR पर लागू नहीं होता है, क्योंकि आप अभी भी चर को बनाए नहीं रखते हैं।
# 2 MRR पर लागू नहीं होता है, क्योंकि रनटाइम सपोर्ट GC और ARC [ऑटोमैटिक रेफरेंस काउंटिंग] में है, जिसका आप उपयोग नहीं कर रहे हैं।
ऐसा लगता है कि कंपाइलर अब केवल शिकायत कर रहा है कि वह ऐसा नहीं कर सकता जो वह कभी नहीं कर सकता। (और एक ऐप डेलीगेट के मामले में, आप रन-टाइम में अंतर नहीं बता पाएंगे, क्योंकि ऐप डेलीगेट को आम तौर पर कभी नहीं हटाया जाता है।)
या __weak
करने के लिए बदल जाते हैं __unsafeunretained
। इससे परंपरा में समस्या का समाधान होगा। चूंकि MRC (xCode 4 से पहले) __weak iOS में नहीं था।
-Wall -Wextra -Wno-unused-parameter
चेतावनी झंडे सक्षम हैं।