In meiner App kann ein Benutzer bestimmte Elemente wie z. B. Lautstärkeregler und Ansichten von UIImage 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 bei der Verwendung der Route ' CGRect rect = item.frame
to NSuserDefaults
oder NSKeyedArchiver
' gesehen. Irgendwelche anderen Vorschläge?
Wenn Sie die verschlüsselte Archivierung auf dem iPhone verwenden, unterstützt UIKit speziell einen Zusatz, der wie folgt aussieht: -encodeCGRect:forKey:
und tut genau das, was Sie wollen. Weitere Informationen finden Sie in den Apple-Dokumenten für NSCoders UIKit Ergänzungen .
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.
Sie können NSStringFromgCGRect () und CGRectFromString () verwenden, um sie zu speichern.
Sie müssen die Floats im CGRect in NSNumbers konvertieren und sie dann in ein Dictionary einfügen.
Wenn Sie viele CGRects speichern müssen, empfehle ich, eine kleine Klasse mit den CGRect-Elementen als archivierbare NSNumber-Attribute zu erstellen. Erstellen Sie einen Initialisierer, der ein CGRect übernimmt. Schreiben Sie dann schnelle NSCoder-Protokollmethoden, damit das gesamte Objekt archiviert werden kann.
Auf diese Weise können Sie die CGRects schnell und einfach konvertieren, speichern und dann abrufen.
Tags und Links nsuserdefaults