标签: nskeyedarchiver

保存PFObject NSCoding

我的问题: saveInBackground没有用.

原因它不起作用:我将PFObjects存储在NSArray中保存到文件使用NSKeyedArchiving.我这样做的方法是NSCoding通过这个实现.由于某些我不知道的原因,正在添加其他几个字段并将其设置为NULL.我有一种感觉,这是搞砸了API调用saveInBackground.当我调用saveInBackground第一组对象(之前NSKeyedArchiving)saveInBackground工作正常.但是,当我在第二个对象(之后NSKeyedArchiving)上调用它时,它不会保存.为什么是这样?

保存

[NSKeyedArchiver archiveRootObject:_myArray toFile:[self returnFilePathForType:@"myArray"]];
Run Code Online (Sandbox Code Playgroud)

恢复

_myArray = (NSMutableArray *)[NSKeyedUnarchiver unarchiveObjectWithFile:
                                             [self returnFilePathForType:@"myArray"]];
Run Code Online (Sandbox Code Playgroud)

NSArchiving之前的对象

2014-04-16 16:34:56.267 myApp[339:60b]
<UserToMessage:bXHfPM8sDs:(null)> {
    from = "<PFUser:sdjfa;lfj>";
    messageText = "<MessageText:asdffafs>";
    read = 0;
    to = "<PFUser:asdfadfd>";
}
2014-04-16 16:34:56.841 myApp[339:60b]
<UserToMessage:bXHsdafdfs:(null)> {
    from = "<PFUser:eIasdffoF3gi>";
    messageText = "<MessageText:asdffafs>";
    read = 1;
    to = "<PFUser:63sdafdf5>";
}
Run Code Online (Sandbox Code Playgroud)

NSArchiving之后的对象

<UserToMessage:92GGasdffVQLa:(null)> {
    ACL = "<null>";
    createdAt …
Run Code Online (Sandbox Code Playgroud)

objective-c nscoding nskeyedarchiver ios parse-platform

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

与archiveRootObject:toFile:和writeToFile的区别:

最近,我正在学习NSKeyedArchiver和NSKeyedUnarchiver.我发现有三种方法来存档数组,我试图找出差异.

1.使用 archiveRootObject:toFile:

    [NSKeyedArchiver archiveRootObject:testArray toFile:filePath];
Run Code Online (Sandbox Code Playgroud)

2.从中获取数据archivedDataWithRootObject:并将其写入文件

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:testArray];
    [data writeToFile:filePath atomically:YES];
Run Code Online (Sandbox Code Playgroud)

3.使用encodeObject:获取数据

    NSMutableData *data = [NSMutableData data];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:testArray forKey:@"testArray"];
    [archiver finishEncoding];
    [data writeToFile:path atomically:YES];
Run Code Online (Sandbox Code Playgroud)

经过测试,我发现上述所有方法都可以正常工作,并将相同的内容写入文件.

Q1:上述所有方式有何不同?

Q2:我可以在第三种方式使用NSData吗?

objective-c nskeyedarchiver ios

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

如何使用UserDefaults保存UIColor?

我正在尝试编写代码,以便用户按下夜间按钮时,如果用户关闭应用程序,背景将变为黑色并保持黑色.(白天模式也一样.)

请注意:我已经编码了按钮,当他们按下按钮时,所有场景都会改变为该模式.

这是我的代码,我将需要保存背景颜色:(我在两个if语句中都需要它)

if GlobalData.dayBool == true && GlobalData.night == false {
    backgroundColor = GlobalData.dayColor 
}

if GlobalData.nightBool == true && GlobalData.dayBool == false {
    backgroundColor = GlobalData.nightColor 
}
Run Code Online (Sandbox Code Playgroud)

我的日夜色彩:

struct GlobalData {
    static var score = 0
    static var dayColor = UIColor(red:0.93, green:0.93, blue:0.93, alpha:1.0)
    static var nightColor = UIColor(red:0.10, green:0.10, blue:0.10, alpha:1.0)  
    static var dayBool = true
    static var nightBool = true
}
Run Code Online (Sandbox Code Playgroud)

nsuserdefaults nskeyedarchiver ios sprite-kit swift

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

NSKeyedArchiver保存的格式是什么?

当我使用NSKeyedArchiver是写入*.plist的数据时,我看到一些例子,人们将输出文件缩小为*.txt,甚至根本没有扩展名?

-(void)saveCore {
    NSMutableData *data = [[NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:reactorCore forKey:@"CORE"];
    [archiver finishEncoding];
    [data writeToFile:[self dataFilePath] atomically:YES];

    [data release];
    [archiver release];
}
Run Code Online (Sandbox Code Playgroud)

加里

cocoa-touch objective-c nskeyedarchiver

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

使用NSKeyedArchiver复制UIView会引发NSInvalidUnarchiveOperationException

用这个来复制 UIView

UIView copyOfView = 
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]]
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

NSInvalidUnarchiveOperationException

[NSKeyedUnarchiver decodeBoolForKey]: value for key (UIHighlighted) is not a boolean

iphone xcode uiview nskeyedarchiver ios

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

从NSKeyedArchiver加载Singleton的状态

我有一个班级,我已经成为一个单身,并且能够使用NSKeyedArchiver保存它的状态,但我无法绕过它将状态拉回来.

在我负载的功能中

Venue *venue = [Venue sharedVenue];
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
venue = [unarchiver decodeObjectForKey:@"Venue"];
[unarchiver finishDecoding];
Run Code Online (Sandbox Code Playgroud)

有了这段代码,decodeObjectForKey会返回什么?它实际上不是Venue的另一个实例,它不会加载任何已保存的值.在我将它转换为单件保存之前,加载工作正常.

iphone singleton cocoa-touch objective-c nskeyedarchiver

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

如何使用NSKeyedArchiver对自定义类进行编码和解码

我有一个我希望保存和加载的自定义类.该类包含NSDate,NSString和NSNumber.我在.h文件中实现了NSCoding协议.这是我到目前为止的代码.theDate是一个NSDate.theName是NSString.homeAway是NSNumber.

-(void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:theDate forKey:@"theDate"];
[aCoder encodeObject:theName forKey:@"theName"];
[aCoder encodeObject:homeAway forKey:@"homeAway"];
}

-(id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super init])) {
    theDate = [aDecoder decodeObjectForKey:@"theDate"];
    theName = [aDecoder decodeObjectForKey:@"theName"];
    homeAway = [aDecoder decodeObjectForKey:@"homeAway"];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)

我使用下面的代码加载我的自定义对象.当我在调试器中使用print-object时,homeAway只显示为实际对象.theDate和theName说0x4e4f150似乎没有指向有效的对象.

[gamesArray setArray:[NSKeyedUnarchiver unarchiveObjectWithFile:path]];  
Game *loadedGame = [gamesArray objectAtIndex:gameNumber];
Run Code Online (Sandbox Code Playgroud)

我使用以下代码保存数据:

我用它来调用我的类来创建一个新游戏(我试图保存的自定义类).代码最多为NSDate*aDate = [gameDate date]; 是无关紧要的.

-(void)newGame {
if (homeAway != 0) {
    if (dateChanged == 1) {
        if ([nameField.text length] > 0) {
            [homeButton setImage:[UIImage imageNamed:@"HomeGray.png"] forState:UIControlStateNormal];
            [awayButton setImage:[UIImage imageNamed:@"AwayGray.png"] forState:UIControlStateNormal]; …
Run Code Online (Sandbox Code Playgroud)

xcode memory-management nscoding nskeyedarchiver saving-data

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

NSData从NSKeyedArchiver到NSString

我正在尝试将NSKeyedArchiver生成的NSData转换为NSString,以便我可以传递它并最终将其转换回NSData.我必须将其作为字符串传递(我使用的是三次传递URL).我已经经历了各种编码,UTF8,ASCII等,并且无法获得任何工作.NSKeyedArchiver说NSData被格式化为属性列表:NSPropertyListBinaryFormat_v1_0.

有没有人知道如何将这个NSData转换为String并再次返回?字符串的大小不是问题.

谢谢

cocoa objective-c nsstring nskeyedarchiver nsdata

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

NSKeyedUnarchiver unarchiveObjectWithData返回nil

我有一个用NSCoder/ NSKeyedArchiver和序列化和反序列化的类NSKeyedUnarchiver.我有单元测试,旨在检查我处理序列化格式中的各种错误(这不是一个简单的存档,但包含存档).

但是,自从我升级到Swift 2/iOS 9后,测试显示出一些不寻常的行为.以前,无效归档的测试失败,因为反序列化无效归档引发了一个Objective-C异常,正如文档声明的那样,由于Swift无法捕获它们而导致程序崩溃.这很好,我打算在将来的某个时候修复测试.

现在,测试通过.当送给我的随机或确定性垃圾,我反而收到nil来自背部unarchiveObjectWithData,而不是例外.我已经检查了这个方法的文档,并且没有列出任何行为更改.

坦率地说,我发现这种行为变得非常可疑,因为没有提到这种变化是如何或为何发生的.我之前失败的单元测试刚刚过去,没有明显的原因.

这是新的预期行为(它返回nil)?如果没有,我如何获得实际的预期行为(Obj-C异常)而不是nil无效的归档?

nskeyedarchiver ios swift ios9 swift2

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

NSKeyedArchiver不归档我的Codable类

这是我的Codable类:

class SensorOutput: Codable {

    var timeStamp: Date?

    var gyroX: Double?
    var gyroY: Double?
    var gyroZ: Double?

    var accX: Double?
    var accY: Double?
    var accZ: Double?

    var magX: Double?
    var magY: Double?
    var magZ: Double?

    init() {}
}
Run Code Online (Sandbox Code Playgroud)

在这里,我尝试编写并读取该类的对象以进行归档:

    let myData = SensorOutput()
    myData.timeStamp = Date()
    myData.gyroX = 0.0
    myData.gyroY = 0.0
    myData.gyroZ = 0.0
    myData.accX = 0.0
    myData.accY = 0.0
    myData.accZ = 0.0
    myData.magX = 0.0
    myData.magY = 0.0
    myData.magZ = 0.0

    NSKeyedArchiver.archiveRootObject(myData, toFile: filePath)

    if let Data = …
Run Code Online (Sandbox Code Playgroud)

nskeyedarchiver ios swift4 codable

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