我有新闻ViewController和TeamViewController.所述TeamViewController含有选择加入到阵列时teamObjects的的tableView.我想添加这个数组,NSUserDefaults所以我可以从NewsController包含url请求的地方访问它们,其中需要teamObjects.但是我一直得到:
'尝试为关键团队插入非属性列表对象("")
如果有更好的方法而不是存储它,我愿意接受其他建议 NSUserDefaults
didSelectRowAtIndexPath 方法
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
let team = self.teamArray[indexPath.row] as Team
var removed = false
for (index, value) in enumerate(self.teamSelected) {
if (value == team) {
self.teamSelected.removeAtIndex(index)
removed = true
}
}
if (!removed) {
self.teamSelected.append(team)
}
var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setValue(self.teamSelected, forKey: "teams")
userDefaults.synchronize()
tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
我的目标
class Team: NSObject{
var id: Int!
var name: NSString!
var …Run Code Online (Sandbox Code Playgroud) 我在Playground使用Swift 3,Xcode 8.0:
import Foundation
class Person: NSObject, NSCoding {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
required convenience init(coder aDecoder: NSCoder) {
let name = aDecoder.decodeObject(forKey: "name") as! String
let age = aDecoder.decodeObject(forKey: "age") as! Int
self.init(
name: name,
age: age
)
}
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: "name")
aCoder.encode(age, forKey: "age")
}
}
Run Code Online (Sandbox Code Playgroud)
创建Person数组
let newPerson = Person(name: "Joe", age: 10)
var people = [Person]() …Run Code Online (Sandbox Code Playgroud) 我有一个我要保存的自定义类NSUserDefaults.我被告知我需要将类对象转换为数据以便将其保存到NSUserDefaults.我发现了很多离散的字符串或内容,NSData但是自定义类没有NSData.我对NSData编码的复杂性知之甚少.任何帮助都表示赞赏
编辑:虽然我知道这里有类似的答案,但没有一个在Swift中.语言之间的翻译是可行的,但它非常繁琐,有时非常反直觉.
我有一个对象数组,每个对象都有许多属性.以下是循环遍历对象数组的一些示例数据:
Name = Rent
Default Value 750
This Months Estimate = 750
Sum Of This Months Actuals = 0
Risk Factor = 0.0
Monthly Average = 750.0
--------------
Name = Bills
Default Value 250
This Months Estimate = 170
Sum Of This Months Actuals = 140
Risk Factor = 0.0
Monthly Average = 190.0
--------------
Name = Food
Default Value 240
This Months Estimate = 200
Sum Of This Months Actuals = 95
Risk Factor = 0.0
Monthly Average = …Run Code Online (Sandbox Code Playgroud) arrays persistent-storage nsuserdefaults nskeyedarchiver swift
我上课了
class Player {
var name = ""
func encodeWithCoder(encoder: NSCoder) {
encoder.encodeObject(name)
}
func initWithCoder(decoder: NSCoder) -> Player {
self.name = decoder.decodeObjectForKey("name") as String
return self
}
init(coder aDecoder: NSCoder!) {
self.name = aDecoder.decodeObjectForKey("name") as String
}
init(name: String) {
self.name = name
}
}
Run Code Online (Sandbox Code Playgroud)
我想序列化并保存到用户默认值.
首先,我不确定如何正确编写编码器和解码器.所以对于init我写了两个方法.
当我尝试执行此代码时:
func saveUserData() {
let player1 = Player(name: "player1")
let myEncodedObject = NSKeyedArchiver.archivedDataWithRootObject(player1)
NSUserDefaults.standardUserDefaults().setObject(myEncodedObject, forKey: "player")
}
Run Code Online (Sandbox Code Playgroud)
应用程序崩溃,我收到此消息:
*** NSForwarding: warning: object 0xebf0000 of class '_TtC6GameOn6Player' does not implement methodSignatureForSelector: -- trouble …Run Code Online (Sandbox Code Playgroud) 我看过一些帖子像这样一个关于子类之间的差别NSObject在斯威夫特或者只是有其天然的基础class,没有子类.但他们都有点旧帖,我不清楚这个话题.
你NSObject什么时候应该继承?子类化和非子类化之间的实际区别是什么?目前Swift的推荐是什么?
我有一个简单的函数,我将一个对象保存到用户默认值,以便以后加载它,它看起来像这样:
func saveGame() {
// hero is an instance of the class Hero, subclassed from SKSpriteNode
UserDefaults.standard.set(hero, forKey: HeroObjectKey)
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
2017-03-13 21:15:33.124271 Castle [5405:5208658] [User Defaults]尝试设置非属性列表对象名称:'hero'纹理:['hero1.ico'(32 x 32)]位置:{0,0}缩放:{1.00,1.00}大小:{32,32} anchor:{0.5,0.5} rotation:0.00作为关键heroObjectKey的NSUserDefaults/CFPreferences值
这是因为我无法保存自己的自定义对象,还是不喜欢对象中的某些属性值?
注意:有一个非常类似的问题部分地解决了我的问题,但由于Swift3与他们使用的任何东西之间的差异,那里接受的答案对我不起作用.所以我会在这里提供答案.
我有一个名为的自定义类Person,它在输入信息时存储有关某人的各种属性.
class Person {
// Person dictionary variable
var name: String?
var age: String?
var html_url: String?
init(json: NSDictionary) { // Dictionary object
self.name = json["name"] as? String
self.age = json["age"] as? String
self.html_url = json["html_url"] as? String // Location of the JSON file
}
}
Run Code Online (Sandbox Code Playgroud)
创建字典后,将其放入数组中.NSUserDefaults当点击按钮时,我在将阵列保存时遇到问题.
personArray.append(newPerson) // newPerson = dictionary of attributes
NSUserDefaults.standardUserDefaults().setObject(personArray, forKey: "personArray")
NSUserDefaults.standardUserDefaults().synchronize()
Run Code Online (Sandbox Code Playgroud)
我已经看过如何在NSUserDefaults中存储自定义对象和使用NSCoding将自定义SWIFT类保存到UserDefaults但是我没有运气并且发现它很难理解.
当我只是尝试保存到NSUserDefaults时,我被告知以下内容:
Attempt to set a non-property-list object (
"PersonApp.Person"
) as an NSUserDefaults/CFPreferences …Run Code Online (Sandbox Code Playgroud) 如何存储我在NSUserDefaults中创建的Goal类型的对象数组?(快速)
这是代码:
func saveGoalList ( newGoalList : [Goal] ){
let updatedGoalList = newGoalList;
NSUserDefaults.standardUserDefaults().setObject(updatedGoalList, forKey: "GoalList")
NSUserDefaults.standardUserDefaults().synchronize()
}
class GoalsViewController: MainPageContentViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet var tableView: GoalsTableView!
var cell = GoalTableViewCell()
var goalsArray : Array<Goal> = [] //
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
if var storedGoalList: [Goal] = NSUserDefaults.standardUserDefaults().objectForKey("GoalList") as? [Goal]{
goalsArray = storedGoalList;
}
var goal = Goal(title: "Walk the Dog")
goalsArray.append(goal)
saveGoalList(goalsArray)
self.tableView?.reloadData()
tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension
self.xpnotificationView.alpha = …Run Code Online (Sandbox Code Playgroud) 我试图加密存储在领域数据库中的数据.我按照Realm的Swift页面上提到的示例代码.我想加密数据而不是数据库文件.以下是我正在使用的代码:
var error: NSError? = nil
let configuration = Realm.Configuration(encryptionKey: EncryptionManager().getKey())
if let realmE = Realm(configuration: configuration, error: &error) {
// Add an object
realmE.write {
realmE.add(objects, update: T.primaryKey() != nil)
}
}
Run Code Online (Sandbox Code Playgroud)
对象是我需要在数据库中插入的对象列表.下面是从示例代码中挑选的getKey()函数前面的代码:
func getKey() -> NSData {
// Identifier for our keychain entry - should be unique for your application
let keychainIdentifier = "io.Realm.test"
let keychainIdentifierData = keychainIdentifier.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
// First check in the keychain for an existing key
var query: [NSString: AnyObject] …Run Code Online (Sandbox Code Playgroud) swift ×9
ios ×7
swift3 ×2
arrays ×1
class ×1
cocoa-touch ×1
encryption ×1
inheritance ×1
ios8 ×1
nscoding ×1
nsdata ×1
nsobject ×1
realm ×1
subclass ×1
swift2 ×1
userdefaults ×1
xcode ×1