相关疑难解决方法(0)

将自定义对象保存到NSUserDefaults中

我有新闻ViewControllerTeamViewController.所述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)

nsuserdefaults ios swift

67
推荐指数
2
解决办法
7万
查看次数

Swift 3从userDefaults保存并检索自定义对象

我在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)

xcode nscoding ios swift swift3

61
推荐指数
4
解决办法
6万
查看次数

将自定义类对象转换为NSData

我有一个我要保存的自定义类NSUserDefaults.我被告知我需要将类对象转换为数据以便将其保存到NSUserDefaults.我发现了很多离散的字符串或内容,NSData但是自定义类没有NSData.我对NSData编码的复杂性知之甚少.任何帮助都表示赞赏

编辑:虽然我知道这里有类似的答案,但没有一个在Swift中.语言之间的翻译是可行的,但它非常繁琐,有时非常反直觉.

nsdata ios swift

24
推荐指数
2
解决办法
2万
查看次数

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

15
推荐指数
2
解决办法
2万
查看次数

如何在Swift中归档和取消归档自定义对象?或者如何在Swift中将自定义对象保存到NSUserDefaults?

我上课了

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)

cocoa-touch ios swift ios8

14
推荐指数
5
解决办法
2万
查看次数

Swift 3:是否继承NSObject?

我看过一些帖子像这样一个关于子类之间的差别NSObject在斯威夫特或者只是有其天然的基础class,没有子类.但他们都有点旧帖,我不清楚这个话题.

NSObject什么时候应该继承?子类化和非子类化之间的实际区别是什么?目前Swift的推荐是什么?

inheritance class subclass nsobject swift

11
推荐指数
1
解决办法
1万
查看次数

无法在UserDefaults中设置非属性列表对象

我有一个简单的函数,我将一个对象保存到用户默认值,以便以后加载它,它看起来像这样:

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与他们使用的任何东西之间的差异,那里接受的答案对我不起作用.所以我会在这里提供答案.

swift3 userdefaults

9
推荐指数
1
解决办法
1万
查看次数

如何使用NSUserDefaults在Swift中存储自定义类的数组?

我有一个名为的自定义类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 ios swift swift2

8
推荐指数
2
解决办法
9823
查看次数

如何存储自定义对象数组(目标)

如何存储我在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)

nsuserdefaults ios swift

4
推荐指数
2
解决办法
3628
查看次数

SWIFT - Realm db加密无法正常工作

我试图加密存储在领域数据库中的数据.我按照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)

encryption realm ios swift

1
推荐指数
1
解决办法
1837
查看次数