Tag: nscoding

iOS对象从头开始存档

我正在研究一个iOS应用程序,涉及到保存和检索一个NSMutableArray,其中包含一个自定义对象的多个实例。 我已经看过几个指导,如苹果的文档 我得到了如何做到这一点(我认为),似乎我不得不使用归档,因为我的数组中的对象不是原始variables,因此我已经使我的对象NSCoding兼容。 不过,我也看到使用NSDefaults或任何我不明白的例子(我没有文件IO经验)。 在看到所有这些信息之后,我很难将所有东西拼凑在一起。 所需要的是一个完整的从开始到结束的示例程序的指南,它成功地使用归档来保存和检索自定义对象(在数组中)。 如果有人能指出一个很好的指导,或者在这个post上自己做,那将是非常感谢! 谢谢大家,堆栈溢出是一个很棒的地方! PS如果需要更多信息,请在评论中告诉我!

如何将通用自定义对象保存到UserDefaults?

这是我的通用类: open class SMState<T: Hashable>: NSObject, NSCoding { open var value: T open var didEnter: ( (_ state: SMState<T>) -> Void)? open var didExit: ( (_ state: SMState<T>) -> Void)? public init(_ value: T) { self.value = value } convenience required public init(coder decoder: NSCoder) { let value = decoder.decodeObject(forKey: "value") as! T self.init(value) } […]

encodeWithCoder:无法识别的select器发送到实例

我试图使用NSCoding协议读取和写入数据plist。 当我尝试编写NSObject的子类[GolfHoles]时,我得到一个exception。 我已经阅读了几个不同的方法,但没有任何帮助。 class GolfCourse: NSObject, NSCoding { var name: String = "" var location: String = "" var holes: [GolfHole] = [GolfHole]() init(holes: [GolfHole]) { self.holes = holes } // MARK: NSCoding Protocol func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(name, forKey: "name") aCoder.encodeObject(location, forKey: "location") aCoder.encodeObject(holes, forKey: "holes") // exception here } required init(coder aDecoder: NSCoder) […]

如何使用NSCoding作为结构的c数组? (MKPolyline)

我想将NSCoding支持添加到一个c数组结构中。 具体来说,这是为MKPolyline的子类,即这是我必须处理: @property (nonatomic, readonly) MKMapPoint *points; @property (nonatomic, readonly) NSUInteger pointCount; + (MKPolyline *)polylineWithPoints:(MKMapPoint *)points count:(NSUInteger)count; 我发现如何编码一个单独的结构很好的答案 。 例如 NSValue* point = [NSValue value:&aPoint withObjCType:@encode(MKMapPoint)]; [aCoder encodeObject:point forKey:@"point"]; …. NSValue* point = [aDecoder decodeObjectForKey:@"point"]; [endCoordinateValue getValue:&aPoint]; 有没有一种很好的方式将其应用于ac数组 – 或者我只需要遍历c数组?

何时使用NSSecureCoding

我正在学习Apple在iOS 6中引入的NSSecureCoding协议。 从我迄今为止的理解来看,每当一个类对自身的实例进行编码/解码时,就应该使用它来防止replace攻击。 我想知道在其他情况下使用它是否合适。 特别是如果一个类通过对其实例variables进行编码/解码来符合NSCoding ,而不是整个实例本身,那么实现NSSecureCoding还是可取的吗? 编辑 假设我有一个像下面这样实现NSCoding类 – (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:self.aString forKey:@"aMeaningfulString"]; } – (id)initWithCoder:(NSCoder *)decoder { if((self = [super init])) { self.aString = [decoder decodeObjectForKey:@"aMeaningfulString"]; } return self; } 并且假设不涉及XPC。 这个类的实例将被存档在存储在磁盘上的plist中。 安全性方面,使用-decodeObjectOfClass:forKey:与-decodeObjectForKey:相反有什么好处吗?

如何存储一个MKPolyline属性作为可转换的iOS coredata与swift?

允许在CoreData中快速存储MKPolyline所需的代码是什么? 例如,如果我有一个我想要保存MKPolyline的核心数据实体(称为“myEntity”),并将“折线”字段添加为可转换的,并将其设置为xcode中的“可转换”。 也产生NSManagedObject的子类。 myEntity.swift import UIKit import CoreData import MapKit class myEntity: NSManagedObject { } myEntity所+ CoreDataProperties.swift import Foundation import CoreData extension myEntity { @NSManaged var title: String @NSManaged var polyline: NSObject? } 问题 – 需要哪些代码才能使其工作? (我注意到这个post重新objective-c,但我很努力理解/端口/让这个工作 – 你如何存储在核心数据NSMutablearrays的数据? )

Game Center matchData的最佳实践

我是GKTurnBasedMatch的新手,我试图弄清楚在轮到队员之间发送的“matchData”是什么好的做法。 我发现的所有教程主要包括发送一串文本,我想发送更多的东西。 如果有人能给我一个更高级的教程,那将是非常棒的。 我想做的一个例子是一场战斗。 这两个玩家有他们的化身,他们有不同的细节(健康,攻击,防守等),我应该如何发送这些数据? 我认为可能的唯一方法是将所有的匹配细节(很多)编码成一个NSDictionary并发送,以便它们可以再次放回到自定义匹配对象中。 我应该实施NSCoding? 谢谢!

保存自定义对象的NSArray

我创build了UIImage(UIImageExtra)的子类,因为我想包含额外的属性和方法。 我有一个包含此自定义类的实例的数组。然而,当我保存该数组时,它显示UIImageExtra类中的额外数据不会保存。 UIImageExtra符合NSCoding,但既不调用initWithCoder或encodeWithCoder,因为我添加的NSLog语句不打印。 我的方法来保存数组看起来像这样: – (void)saveIllustrations { if (_illustrations == nil) { NSLog(@"Nil array"); return; } [self createDataPath]; //Serialize the data and write to disk NSString *illustrationsArrayPath = [_docPath stringByAppendingPathComponent:kIllustrationsFile]; NSMutableData *data = [[NSMutableData alloc] init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:_illustrations forKey:kIllustrationDataKey]; [archiver finishEncoding]; [data writeToFile:illustrationsArrayPath atomically: YES]; } 而UIImageExtra有以下保存的委托方法: #pragma mark […]

SWIFT如何创buildNSCoding子类并从另一个类中调用它?

我发现NSCoding这黑色的代码,它几乎是想我想要的。 我发现它的链接在下面。 如何在其他类中创build一个NSCoding类和用户? 下面的代码不能工作。 我希望有人能帮助我。 import Foundation import UIKit class User: NSObject, NSCoding { var name: String init(name: String) { self.name = name } required init(coder aDecoder: NSCoder) { self.name = aDecoder.decodeObjectForKey("name") as String } func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(name, forKey: "name") } } //new class where I want to set and get the object […]

Swift:不符合协议NSCoding

我试图在我用swift编写的类上使用NSCoding协议,但似乎无法弄清楚为什么编译器会在执行所需的方法时抱怨它“不符合协议NSCoding”: class ServerInfo: NSObject, NSCoding { var username = "" var password = "" var domain = "" var location = "" var serverFQDN = "" var serverID = "" override init() { } init(coder aDecoder: NSCoder!) { self.username = aDecoder.decodeObjectForKey("username") as NSString self.password = aDecoder.decodeObjectForKey("password") as NSString self.domain = aDecoder.decodeObjectForKey("domain") as NSString self.location = […]