iPhoneObjective-C:NSMutableArray writeToFile不会写入文件.始终返回NO

iPhoneObjective-C:NSMutableArray writeToFile不会写入文件.始终返回NO,第1张

概述我正在尝试序列化两个实现NSCoding协议的NSObject的NSMutable Arrays.然而,它适用于一个(堆栈)而不是其他(卡).我有以下代码块: -(void) saveCards{ NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) 我正在尝试序列化两个实现NSCoding协议的NSObject的NSMutable Arrays.然而,它适用于一个(堆栈)而不是其他(卡).我有以下代码块:

-(voID) saveCards{    NSArray* paths = NSSearchPathForDirectorIEsInDomains(NSdocumentDirectory,NSUserDomainMask,YES);     Nsstring* documentsDirectory = [paths objectAtIndex:0];    Nsstring* cardsfile = [documentsDirectory stringByAppendingPathComponent:@"cards.state"];    Nsstring* stacksfile = [documentsDirectory stringByAppendingPathComponent:@"stacks.state"];    BOol c = [rootStack.cards writetofile:cardsfile atomically:YES];    BOol s = [rootStack.stacks writetofile:stacksfile atomically:YES];}

我使用调试器逐步执行此方法,并在最后两行代码运行后,检查两个BOol的值. BOol c为NO,BOol为YES. stacks数组实际上是空的(这可能就是它的工作原理).卡阵列有内容.为什么包含内容的数组失败了?我无法弄清楚这一点.我查看了SOF上的大量线程,他们每个人都说这个问题是因为他们写的文件的保护级别阻止了他们编写.这不是我的问题,因为我正在写入documents文件夹.我已经检查过双重和三重检查,无论是rootStack.cards还是rootStack.stack都不是.而且我已经检查过卡片确实有内容.

以下是我的Notecard类的编码器方法(我添加了所有if语句作为尝试解决此问题的一部分,以确保尝试编码nil值不会破坏某些内容):

-(voID) encodeWithCoder:(NSCoder *)encoder{    if(text)        [encoder encodeObject:text forKey:@"text"];    if(backText)        [encoder encodeObject:backText forKey:@"backText"];    if(x)        [encoder encodeObject:x forKey:@"x"];    if(y)        [encoder encodeObject:y forKey:@"y"];    if(wIDth)        [encoder encodeObject:wIDth forKey:@"wIDth"];    if(height)        [encoder encodeObject:height forKey:@"height"];    if(timeCreated)        [encoder encodeObject:timeCreated forKey:@"timeCreated"];    if(audioManagerTicket)        [encoder encodeObject:audioManagerTicket forKey:@"audioManagerTicket"];    if(backgroundcolor)        [encoder encodeObject:backgroundcolor forKey:@"backgroundcolor"];}-(ID) initWithCoder:(NSCoder *)decoder{    self = [super init];    if(!self)        return nil;    self.text               = [decoder decodeObjectForKey:@"text"];    self.backText           = [decoder decodeObjectForKey:@"backText"];    self.x                  = [decoder decodeObjectForKey:@"x"];    self.y                  = [decoder decodeObjectForKey:@"y"];    self.wIDth              = [decoder decodeObjectForKey:@"wIDth"];    self.height             = [decoder decodeObjectForKey:@"height"];    self.timeCreated        = [decoder decodeObjectForKey:@"timeCreated"];    self.audioManagerTicket = [decoder decodeObjectForKey:@"audioManagerTicket"];    self.backgroundcolor    = [decoder decodeObjectForKey:@"backgroundcolor"];    return self;}

每个字段都是Nsstring,NSNumber或UIcolor.

谢谢你的帮助

解决方法 您将属性列表与存档混淆.这很容易做到.

writetofile:atomically:要求内容符合属性列表;也就是说,数组中的所有对象都是属性列表(字典,字符串,数据,数组等等)中允许的类之一的实例.

见:writeToFile:atomically:’s documentation.

你想要的是NSArchiver,更具体地说,阅读archiving guide.

总结

以上是内存溢出为你收集整理的iPhone / Objective-C:NSMutableArray writeToFile不会写入文件.始终返回NO全部内容,希望文章能够帮你解决iPhone / Objective-C:NSMutableArray writeToFile不会写入文件.始终返回NO所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1081602.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存