Antworten:
Set Build Settings -> Apple LLVM 7.1 - Language - Objective C -> Weak References in Manual Retain Release
zu YES
.
Entnommen aus Apple Developers Forums - Xcode 7.3b4, kein Bogen, kann keine __schwache Referenz erstellen .
Dies ist die offizielle Antwort von Apple über den Link:
Dieses Problem verhält sich wie folgt: Wir sind dabei, schwache Referenzen in allen Objective-C-Sprachmodi zu implementieren. Da "__weak" in Nicht-ARC- (und Nicht-GC-) Sprachmodi in der Vergangenheit ignoriert wurde, haben wir diesen Fehler hinzugefügt, um auf Stellen hinzuweisen, an denen sich die Semantik in Zukunft ändern wird. Bitte aktualisieren Sie Ihren Fehlerbericht, um uns mitzuteilen, ob dies immer noch ein Problem für Sie ist.
Wenn Sie also Pod für Bibliotheken von Drittanbietern verwenden, müssen Sie entweder __weak in Nicht-ARC löschen oder auf die Aktualisierung warten.
Update @ 3/23
Ich hätte mehr über Flaggen recherchieren sollen, die ich an Complier weitergeben kann, um diese Art von Dingen zu umgehen. Grundsätzlich sollten Sie __weak
ab sofort nicht mehr im Nicht-ARC-Modus arbeiten, um unerwartete Konflikte zu vermeiden. Für Cocoapods-Benutzer müssen Sie nicht löschen __weak
oder auf die Aktualisierung warten, sondern das Weak References in Manual Retain Release
Flag in den Build-Einstellungen auf JA setzen, wie Lean sagte. Ich hoffe das hilft.
Der beste Weg, dies zu lösen, besteht darin post_install
, Ihrem Podfile ein Skript hinzuzufügen, das das Weak References in Manual Retain Release
Flag yes
in allen Ihren Pod-Zielen setzt. Fügen Sie dazu einfach den folgenden Code unten in Ihr Feld ein 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
Dies führt manchmal zu einem Fehler -fobjc-weak is not supported on the current deployment target
. Sie können dies lösen, indem Sie eine weitere Konfigurationsoption hinzufügen und alle Pods dazu zwingen, auf die gewünschte Version abzuzielen ( basierend auf dieser Antwort ):
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
Problemumgehung für schwache Facebook-Referenzen in FBSettings.m
In Podfile ist es möglich, ein Skript zu schreiben, das nach der Installation / Aktualisierung des Pods ausgeführt wird. Dort wird Folgendes beschrieben.
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 wie man die Worte der Magie findet, die. .
Ich habe das gefunden.
Ich denke, es ist bedeutet, __weak zu löschen
https://forums.developer.apple.com/thread/38934
Ähm, gab es jemals eine schwache Variablenreferenz unter MRR [manuelle Retain-Release]? "__schwach" bedeutet eines oder beide von zwei Dingen:
Eine nicht besessene Referenz (dh keine Aufbewahrungsanzahl).
Eine Nullreferenz (dh die Laufzeit wird auf Null gesetzt, wenn die Zuordnung des referenzierten Objekts aufgehoben wird).
# 1 gilt nicht für MRR, da Sie die Variable sowieso nicht beibehalten.
# 2 gilt auch nicht für MRR, da die Laufzeitunterstützung in GC und ARC [automatische Referenzzählung] erfolgt, die Sie nicht verwenden.
Es hört sich so an, als würde sich der Compiler jetzt nur beschweren, dass er nicht das tun kann, was er niemals tun könnte. (Und im Fall eines App-Delegaten können Sie den Unterschied zur Laufzeit nicht erkennen, da der App-Delegat im Allgemeinen nie freigegeben wird.)
Oder wechseln Sie __weak
zu __unsafeunretained
. Dies wird das Problem in der Tradition lösen. Da MRC (vor xCode 4 -) __weak nicht in iOS war.
-Wall -Wextra -Wno-unused-parameter
Warnflags aktiviert.