In meiner App kann ein Benutzer bestimmte Elemente wie z. B. Lautstärkeregler und UIImage-Ansichten ziehen. Mein Ziel ist es, in der Lage zu sein, die Positionen der Elemente zu speichern, damit der Benutzer die Elemente nach dem Neustart nicht erneut ziehen muss. Leider habe ich Fehler gesehen entlang der Route CGRect rect = item.frame
bis NSuserDefaults
oder NSKeyedArchiver
Route. Irgendwelche anderen Vorschläge?NSKeyedArchiver/NSuserDefaults - Speichern eines CGRect
Antwort
Wenn Sie eine verschlüsselte Archivierung auf dem iPhone verwenden, unterstützt UIKit speziell einen Zusatz, der wie folgt aussieht: -encodeCGRect:forKey:
und macht genau das, was Sie wollen. Siehe die Apple-Dokumentation für NSCoder's UIKit additions.
Wenn Sie NSUserDefaults verwenden, erhalten Sie nicht den Luxus, einen expliziten Encoder für CGRects zu verwenden, aber wie einige andere Antworten sagen, könnten Sie sie als Strings mit NSStringFromCGRect()
und umgekehrt speichern.
würden Sie wahrscheinlich kodieren CGRect
NSData
verwenden und speichern Sie dann NSData
Objekt mit NSUserDefaults
oder NSKeyedArchiver
.
Ich bin nicht sicher, welche Fehler genau beziehen Sie sich in Ihrer Frage, vielleicht mehr Erklärung benötigt?
Sie müssen die Floats im CGRect in NSNumbers konvertieren und sie dann in ein Dictionary einfügen.
Wenn Sie brauchen viel CGRects zu speichern, empfehle ich ein wenig leichte Klasse mit den CGRect Elementen zu schaffen als archivierbar NSNumber Attribute. Erstellen Sie einen Initialisierer, der ein CGRect übernimmt. Dann schreibe schnelle NSCoder-Protokoll-Methoden, damit das gesamte Objekt archiviert werden kann
So können Sie schnell und einfach konvertieren, speichern und dann die CGRects abrufen.
Sie können NSStringFromgCGRect() und CGRectFromString() verwenden, um sie zu speichern.
- 1. Konvertieren eines CGRect eines Objekts in einem Subview in UITableViewCell in uitable zu CGRect gegen
- 2. Zeichnen eines CGRect durch Berühren von
- 3. Zentrieren eines CGRect in einer Ansicht
- 4. Convert MKMapRect zu CGRect
- 5. iOS: CGRect eines bestimmten Textes in einem String eines UILabel
- 6. CGContextFillRects: CGRect * funktioniert nicht. Zugewiesene CGRect-Elemente werden nicht gespeichert
- 7. presentModalViewController in CGRect
- 8. CGRect var als Eigenschaftswert?
- 9. mit zwei CGRect spielen
- 10. Versuch CGRect zu performwithobject
- 11. Wie werden CGRect-Werte in NSMutableArray gespeichert?
- 12. Erstellen Sie eine komplexe CGRect
- 13. Position von CGRect funktioniert nicht
- 14. iOS: Gebrauchte Typ ‚CGRect‘ (auch bekannt als ‚struct CGRect‘), in dem arithmetischen oder Zeigertyp erforderlich ist
- 15. GPUImage croppen nach CGRect und rotieren
- 16. Wie sind NSRect und CGRect inkompatible Typen?
- 17. Wofür steht "CG" in CGGeometry, CGPoint, CGRect?
- 18. NSRect vs CGRect: y-Achse Inversion
- 19. Syntaxfehler bei der Verwendung von CGRect
- 20. CGRect für Frame von UINavigationController + Statusleiste
- 21. CGRect von verspottet Methode Rückkehr stürzt
- 22. Überprüfen Sie, ob CGRect Null in Getter
- 23. erstellen CGRect mit kurzem Weg - raschem
- 24. Speichern eines Cookies
- 25. Speichern eines persistenten CLLocation
- 26. Sicheres Speichern eines Zugriffstokens
- 27. Speichern eines SecureString
- 28. CGrect vs Beschränkungen in IOS pro programmatische GUI Design?
- 29. Wie CGRect und andere Dinge in Kerndaten gespeichert werden
- 30. Speichern eines Baumes als Vorbestellung
Ein Kommentar mit den Down-Checks wäre nett. Wenn nichts anderes, lässt es mich wissen, warum ich falsch liege. Ich nahm den Ansatz, dass der 'CGRect' als Zahlen gespeichert werden muss, damit sie als Zahlen manipuliert werden können. Wenn Sie eine große Menge von 'CGRect's aktiv verwalten müssen, spart eine Wrapper-Klasse viel Zeit und Mühe auf lange Sicht. – TechZen