Xcode 7.3'e güncelledikten sonra, hatayı Cannot create __weak reference in file using manual reference counting
pod dosyalarında atar . Bu sorunu çözen var mı?
Xcode 7.3'e güncelledikten sonra, hatayı Cannot create __weak reference in file using manual reference counting
pod dosyalarında atar . Bu sorunu çözen var mı?
Yanıtlar:
Set Build Settings -> Apple LLVM 7.1 - Language - Objective C -> Weak References in Manual Retain Release
için YES
.
Apple Developers Forumlarından Alındı - Xcode 7.3b4, ark dışı, __weak referans oluşturamaz .
Bu, bağlantıdan Apple'ın resmi cevabı:
Bu sorun, aşağıdakilere dayalı olarak amaçlandığı gibi davranır: Tüm Objective-C dil modlarında zayıf referanslar uygulama sürecindeyiz. Geçmişte ARC olmayan (ve GC olmayan) dil modlarında "__weak" yok sayıldığından, gelecekte anlambilimin değişeceği yerleri belirtmek için bu hatayı ekledik. Bunun sizin için hala bir sorun olup olmadığını bize bildirmek için lütfen hata raporunuzu güncelleyin.
Dolayısıyla, temel olarak, 3. taraf kitaplıklar için Kapsül kullanıyorsanız, ARC olmayan __weak'i silmeniz veya güncelleme için beklemeniz gerekir.
Güncelleme @ 3/23
Bu tür şeyleri atlamak için complier'a geçebileceğim bayraklar hakkında daha fazla araştırma yapmalıydım. Ancak temelde, __weak
beklenmedik çatışmalardan kaçınmak için şu andan itibaren ARC olmayan modda kullanmamalısınız . Cocoapods kullanıcıları için, __weak
güncellemeyi silmenize veya beklemenize gerek yoktur, ancak Weak References in Manual Retain Release
Yalın'ın dediği gibi yapı ayarlarında bayrağı EVET olarak ayarlamanız gerekir. Umarım bu yardımcı olur.
Bunu çözmenin en iyi yolu post_install
, Pod Dosyanıza tüm bölme hedeflerinizde Weak References in Manual Retain Release
bayrağı ayarlayan bir komut dosyası eklemektir yes
. Bunu yapmak için, aşağıdaki kodu 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
Bazen bunu yapmak hatayla sonuçlanır -fobjc-weak is not supported on the current deployment target
. Bunu, başka bir yapılandırma seçeneği ekleyerek, tüm bölmeleri istediğiniz sürümü hedeflemeye zorlayarak çözebilirsiniz ( bu yanıta göre ):
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'deki Facebook zayıf referansları için geçici çözüm
Pod dosyasına, pod kurulumundan / güncellemesinden sonra çalışacak bir komut dosyası yazmak mümkündür, burada aşağıdakiler açıklanmaktadır.
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 o büyü kelimelerini nasıl bulacağını. .
Bunu buldum.
Sanırım bu __weak'i silmek anlamına geliyor
https://forums.developer.apple.com/thread/38934
Eee, MRR [manuel tutma-bırakma] altında zayıf değişken referansı diye bir şey var mıydı? "__weak" iki şeyden biri veya her ikisi anlamına gelir:
Sahipsiz bir referans (yani bir elde tutma sayısını temsil etmeyen).
Sıfırlama referansı (yani, başvurulan nesnenin serbest bırakılması durumunda çalışma zamanının sıfırlanması).
# 1 MRR için geçerli değildir, çünkü zaten değişkeni korumazsınız.
# 2, MRR için de geçerli değildir çünkü çalışma zamanı desteği, kullanmadığınız GC ve ARC'de [otomatik referans sayma].
Görünüşe göre derleyici şimdi asla yapamayacağı şeyi yapamayacağından şikayet ediyor. (Ve bir uygulama temsilcisi söz konusu olduğunda, uygulama temsilcisi genellikle hiçbir zaman serbest bırakılmadığından, çalışma zamanında farkı söyleyemezsiniz.)
Veya değiştirmek __weak
için __unsafeunretained
. Bu, gelenekteki sorunu çözecektir. MRC'den beri (xCode 4'ten önce -) __weak iOS'ta değildi.
-Wall -Wextra -Wno-unused-parameter
Uyarı bayraklarını etkinleştirdim.