无法将我的班级的 NSMutableArray 保存到文件(IOS)

Posted

技术标签:

【中文标题】无法将我的班级的 NSMutableArray 保存到文件(IOS)【英文标题】:Unable to save NSMutableArray of my class to file (IOS) 【发布时间】:2012-03-18 07:56:11 【问题描述】:

无法找出我的代码不起作用的原因。请帮助某人。

我创建了自己的类,实现了 NSCoding 协议。不知道我错过了什么或错了什么。

这里是保存代码

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"Currency.plist"]; 

Item * item = [[Item alloc] init];
item.x = 3; item.y = 5; item.type = (TType) 3; item.isSelected = NO;

NSMutableArray * array = [[NSMutableArray alloc] init];
[array addObject:item];

[array fileName atomically:YES]  // ( Doesn't Save the file ,returns NO);

这是我班级的代码 *.h*

#import <Foundation/Foundation.h> 

enum TType 

    kNone = 0, 
    KFirst = 1,
    ....
; 

@interface Item : NSObject <NSCoding>

  

@property (nonatomic) int x;
@property (nonatomic) int y;
@property (nonatomic) enum TType type;
@property (nonatomic) BOOL isSelected;

@end

.m

@implementation Item
@synthesize x, y , type , isSelected;

#pragma mark NSCoding Protocol

- (void)encodeWithCoder:(NSCoder *)encoder;

  [encoder encodeInt32:[self x] forKey:@"x"];
  [encoder encodeInt32:[self y] forKey:@"y"];
  [encoder encodeInt32:[self type] forKey:@"type"];
  [encoder encodeBool:[self isSelected] forKey:@"isSelected"];


- (id)initWithCoder:(NSCoder *)decoder;

    if ( ![super init] )
        return nil;

    [self setX:[decoder decodeInt32ForKey:@"x"]];
    [self setY:[decoder decodeInt32ForKey:@"y"]];
    [self setType:(TType)[decoder decodeInt32ForKey:@"color"]];
    [self setIsSelected:[decoder decodeBoolForKey:@"isSelected"]];

    return self;


@end

【问题讨论】:

看到这个帖子***.com/questions/471830/… 【参考方案1】:

我想你会在以下位置找到答案:objects conforming to nscoding will not writetofile

即您不能将 Item 类序列化为属性列表,因为它不是属性列表对象(NSStringNSDataNSArrayNSDictionary)。

查看writeToFile:atomically:的文档:

此方法在写出文件之前递归地验证所有包含的对象都是属性列表对象,如果所有对象都不是属性列表对象,则返回NO,因为结果文件不是有效的属性列表。

【讨论】:

谢谢!:) 因为这工作得很好 [NSKeyedArchiver archiveRootObject:array toFile:fileName]

以上是关于无法将我的班级的 NSMutableArray 保存到文件(IOS)的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 中保存 NSMutableArray 的其他方法

如何从 NSMutableArray 创建 MPMediaCollection?

将 FMResultSet 转换为 NSMutableArray?

NSMutableArray addObject,无法识别的选择器

无法将对象从块添加到 NSMutableArray

NSMutableArray 和属性泄漏内存