我真的很新,使用NSCodingfunction,我试图创build一个归档string的数据的持久性,特别是通过委托传递的UIColor。 我还没有find一个教程,编码的值没有声明和初始化在NSCoding协议符合相同的类。 我有下面的代码,这是符合我创build的协议的方法,并将传递的颜色值作为属性赋值给attributesString。 func didSelectColorCell(color: UIColor) { let coder = NSCoder.init() color.encode(with: coder) noteTextView.setAttributedValueAtSelectedTextRange(NSForegroundColorAttributeName, value: color) } 该应用程序崩溃,并发送给我一个警告:“不能被发送到类NSCoder的抽象对象:创build一个具体的实例! 我真的迷失在如何进行。 我不知道如何使这个教程http://nshipster.com/nscoding/适应我的情况。 有人可以给我提供指导如何订购我的想法,或NSCoding如何与代表工作? 任何帮助,将不胜感激 :)
是的,我已经浏览了许多类似于此问题的问题。 不过,我还是不太明白发生了什么事,至less我不知道如何在我的申请中做到这一点。 所以基本上我的“实践”应用程序有一个主视图控制器,显示两个文本标签。 这些文本标签由一个拥有大型数组的NSObject类填充。 用户在他们想要去的数组中input数字,数组中索引处的string成为一个标签中的文本,而用户input的数字成为另一个标签中的文本。 用户也可以通过按下一个button来从数组中“collections”一个string。 当这种情况发生时,string和索引号被添加到驻留在主视图控制器中的两个单独的可变数组中。 然后,当用户想要看到他们所有的“collections夹”,他们可以滑动(模态)调出具有所有用户的“喜欢的string”的可用视图。 这是通过使用导航控制器/ segue将数据(2个可变数组)从主视图控制器传递到uitableviewcontroller来实现的。 此时,uitableviewcontroller中有两个可变数组,它们包含来自主视图控制器的string和索引号。 然后使用委托/协议将该数据传回给主视图控制器,以在主视图控制器的标签上设置文本(在用户点击可用视图的行中)。 我build立应用程序没有问题; 一切正常。 但我不知道如何保存数据,以便当用户退出应用程序并重新打开它时,仍然可以看到表格视图以及所有他们喜欢的string。 另外,我只是假设在我的情况下,我应该使用NSCoding; 如果,但是,我需要使用核心数据或其他任何东西,然后让我知道。 如果有人能帮助我,我真的很感激。 非常详细的解释请,如果可能的话,示例代码。
我有同样的问题作为vince( NSCoding在Swift的inheritance类中需要初始化 ) 我有一个类“源”和一个子类“RSSSource”。 这些类符合NSObject和NSCoding,我希望能够坚持NSKeyedArchiver。 我不知道如何在子类中创build所需的便利init?(coder aDecoder:NSCoder)。 我想调用超类的便利初始化。 PS:我知道我应该在他的post上发表评论,但我不能。 (声誉太低)
我从来没有使用NSCoding,我很困惑如何实施。 我目前的iPad应用程序有一个UIImageView(称为“背景”),这是我的主视图控制器的属性。 “背景”有一个UIImage“图像”属性(显然)和用户添加的各种子视图。 添加的子视图是我自己的UIImageView的自定义子类。 我需要能够保存“背景”UIImageView的状态,以便可以恢复与存档时相同的图像和所有子视图。 我知道UIImageView符合NSCoding协议,但我不知道在哪里实现encodeWithCoder和initWithCoder。 我从我的主视图控制器调用这些吗? 我是否需要为UIImageView创build一个类别,使我可以重写这些方法? 我是否需要编写代码来存档我的“背景”UIImageView及其子视图的每个属性? 我已经读过其他地方,因为UIImage不符合NSCoding所以需要分类或添加一个类别,以便能够存档UIImageView。 我以为会有一个简单的方法来保存磁盘的一个对象,包括所有的属性,子视图等。似乎有很多事情需要做,以便我保存这个“背景”UIImageView并在以后恢复。 我努力想象我需要做的一切。 任何指针非常感谢!
Swift 3 iOS 10,尝试在NSKeyedArchiver中保存自定义对象的数组,基本上是在用户使用button切换部分之后保存表视图。 我已经尝试了几个post来解决这个问题,但没有运气,现在我试图自己做NSCoding和NSKeyedArchiver。 错误: 无法将types“[Blog]”的值转换为期望的参数types“NSCoder” 错误代码在Blog.swift中,处理NSCoding和我的博客对象的代码 import UIKit class BlogsCoding: NSObject, NSCoding { var blogList : [Blog] init(blogList : [Blog]) { self.blogList = blogList } convenience required init?(coder aDecoder: NSCoder) { guard let blogList = aDecoder.decodeObject(forKey: "blogs") as? [Blog] else { return nil } self.init (blogList : blogList) } func encode(with aCoder: NSCoder) […]
我是一个相对较新的iOS开发人员,我以前的大部分经验来自.NET。 我的应用程序是一个像系统的canvas,有一个父UIView,其中包含所有的对象,用户放置/调整/等作为子视图。 我希望能够将这些职位/configuration保存到指定的文件。 在.NET中,我会简单地inheritanceUIView,给它一个“标题”属性,然后将其序列化到文件,然后反序列化它们加载它们,但在cocoa我很迷茫。 最初我以为我可以做到这一点使用NSCoding,但这似乎不是一个很好的解决scheme,多个文件保存。 所以我看了核心数据,但我不知道如何创build像UIView现有的Cocoa UIKit类的核心数据对象。 我花了一段时间search一下,找不到任何关于这种困境的信息。 我应该使用什么,最好的方法是什么?
我有一个iOS应用程序,数据持久使用NSCoding,更确切地说是NSKeyedArchiver。 此应用程序已经在App Store上提供。 我正在处理应用程序的版本2,数据模型应该改变。 所以我需要处理数据模型迁移。 我希望它通过unit testing覆盖。 在我的testing中,我想用旧的数据模型dynamic生成持久数据,启动迁移,看看是否一切顺利。 目前,归档对象如下所示: MyDataModelObject *object = …. NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:object forKey:key]; [archiver finishEncoding]; 问题是,MyDataModelObject可能被重新考虑,甚至在应用程序的版本2中被删除。 所以我不能在testing中使用这个类来生成一个“旧版本档案”。 有没有一种方法来模拟不使用这个类的类的encodeWithCoder:方法做了什么? 我想达到的是以下几点 – testMigrationFrom_v1_to_v2 { // simulate an archive with v1 data model // I want this part of the code to be as simple as possible // I […]
在ARC下,是否可以使用NSCoding对CGMutablePathRef (或其不可变forms)进行编码/解码? 天真地我尝试: path = CGPathCreateMutable(); … [aCoder encodeObject:path] 但是我从编译器中得到一个友好的错误: Automatic Reference Counting Issue: Implicit conversion of an Objective-C pointer to 'CGMutablePathRef' (aka 'struct CGPath *') is disallowed with ARC 我能做些什么来编码?
我有一个主页有我的第一个视图中的3个文本框,当我导航到不同的视图,并返回到我的第一个视图(即我input所有的价值,我移动到下一页)。我希望我的3文本框保留其值我回到我的主页这里我的示例代码: NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *mobile = MobileNum.text; [defaults setObject:mobile forKey:self.MobileNum.text]; NSString *amountText = amount.text; [defaults setObject:amountText forKey:self.amount.text]; [defaults synchronize]; NSString *temp = [defaults objectForKey:self.MobileNum.text]; NSString *temp1 = [defaults objectForKey:self.amount.text]; NSLog(@"%@ %@",temp,temp1);
我有一个MKPolyline子类,我想实现NSCoding ,即 @interface RSRoutePolyline : MKPolyline <NSCoding> 我问了一个关于编码c数组的最佳方法,并得到了一个很好的答案 。 但是,在MKPolyline没有定义init方法,也就是说没有其他的方式给它的数据,除了它的类方法polylineWithPoints:points 。 这个代码在哪里我的评论是好的? – (void)encodeWithCoder:(NSCoder *)aCoder { MKMapPoint *points = self.points; NSUInteger pointCount = self.pointCount; NSData *pointData = [NSData dataWithBytes:points length:pointCount * sizeof(MKMapPoint)]; [aCoder encodeObject:pointData forKey:@"points"]; [aCoder encodeInteger:pointCount forKey:@"pointCount"]; } – (id)initWithCoder:(NSCoder *)aDecoder { NSData* pointData = [aDecoder decodeObjectForKey:@"points"]; NSUInteger pointCount = [aDecoder decodeIntegerForKey:@"pointCount"]; // Edit […]