Moin!
Vielleicht kann ich jemandem das Suchen ersparen: Ich habe gerade einen Bug meiner App unter Mac Catalyst gefixt, der mich ganz schön in's Grübeln brachte - in diesem Forumsbereich, weil es um die macOS-Seite geht:
Situation:
Ich zeige in einer UITableView eine Reihe (18) von UISwitches an, die Export-Optionen der App repräsentieren und im Core-Data-Modell bitweise in einem
Problem:
Unter iOS funktioniert der ViewController wie gewünscht. Die App unterstützt Mac Catalyst und unter macOS ergibt sich ein (zunächst) merkwürdiges Bild: Während die oberen Schalter ein konsistentes Verhalten zeigen, werden die unteren / späteren scheinbar willkürlich gesetzt und nach Umschalten auch wieder zurück gesetzt, wenn in der Ansicht geblättert (und die Zelle damit neu konfiguriert) wird. Sehr offensichtlich wird das Problem, da die Core-Data-Basis via iCloud synchronisiert wird und man so direkt die unterschiedlichen Schalterstellungen zwischen iOS und macOS erkennen kann.
Lösung:
Das Problem liegt in der 2. Code-Zeile: Die Zuweisung nach der bitweisen AND-Operation ergibt unter iOS (besser: auf Apple-Prozessoren) implizit ein natives
Vielleicht hilft es ja jemandem, Mattes
Vielleicht kann ich jemandem das Suchen ersparen: Ich habe gerade einen Bug meiner App unter Mac Catalyst gefixt, der mich ganz schön in's Grübeln brachte - in diesem Forumsbereich, weil es um die macOS-Seite geht:
Situation:
Ich zeige in einer UITableView eine Reihe (18) von UISwitches an, die Export-Optionen der App repräsentieren und im Core-Data-Modell bitweise in einem
Int32
gespeichert werden. Zum Konfigurieren der UITableViewCell nutze ich den folgenden Code, um jeweils das x. Bit abzufragen und den Schalter entsprechend zu setzen:Unter iOS funktioniert der ViewController wie gewünscht. Die App unterstützt Mac Catalyst und unter macOS ergibt sich ein (zunächst) merkwürdiges Bild: Während die oberen Schalter ein konsistentes Verhalten zeigen, werden die unteren / späteren scheinbar willkürlich gesetzt und nach Umschalten auch wieder zurück gesetzt, wenn in der Ansicht geblättert (und die Zelle damit neu konfiguriert) wird. Sehr offensichtlich wird das Problem, da die Core-Data-Basis via iCloud synchronisiert wird und man so direkt die unterschiedlichen Schalterstellungen zwischen iOS und macOS erkennen kann.
Lösung:
Das Problem liegt in der 2. Code-Zeile: Die Zuweisung nach der bitweisen AND-Operation ergibt unter iOS (besser: auf Apple-Prozessoren) implizit ein natives
bool
und die Zuweisung zum UISwitch-Property ist sauber. Auf einem Intel-Mac ist ein BOOL aber ein signed char
, die implizite Konvertierung ergibt ein anderes Ergebnis. Um die Schalter sauber zu setzen, müsste man das Ergebnis der AND-Operation entweder gegen Null prüfen oder mit zweifachem Negieren ein bool erzwingen. Den entscheidenen Tipp fand ich hier in der Apple-Dokumentation. Der folgende Code funktioniert nun auf beiden Plattformen:Vielleicht hilft es ja jemandem, Mattes
Diese Seite bleibt aus technischen Gründen unbedruckt.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von MyMattes ()