我的问题: 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) 最近,我正在学习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吗?
我正在尝试编写代码,以便用户按下夜间按钮时,如果用户关闭应用程序,背景将变为黑色并保持黑色.(白天模式也一样.)
请注意:我已经编码了按钮,当他们按下按钮时,所有场景都会改变为该模式.
这是我的代码,我将需要保存背景颜色:(我在两个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) 当我使用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)
加里
用这个来复制 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
我有一个班级,我已经成为一个单身,并且能够使用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的另一个实例,它不会加载任何已保存的值.在我将它转换为单件保存之前,加载工作正常.
我有一个我希望保存和加载的自定义类.该类包含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
我正在尝试将NSKeyedArchiver生成的NSData转换为NSString,以便我可以传递它并最终将其转换回NSData.我必须将其作为字符串传递(我使用的是三次传递URL).我已经经历了各种编码,UTF8,ASCII等,并且无法获得任何工作.NSKeyedArchiver说NSData被格式化为属性列表:NSPropertyListBinaryFormat_v1_0.
有没有人知道如何将这个NSData转换为String并再次返回?字符串的大小不是问题.
谢谢
我有一个用NSCoder/ NSKeyedArchiver和序列化和反序列化的类NSKeyedUnarchiver.我有单元测试,旨在检查我处理序列化格式中的各种错误(这不是一个简单的存档,但包含存档).
但是,自从我升级到Swift 2/iOS 9后,测试显示出一些不寻常的行为.以前,无效归档的测试失败,因为反序列化无效归档引发了一个Objective-C异常,正如文档声明的那样,由于Swift无法捕获它们而导致程序崩溃.这很好,我打算在将来的某个时候修复测试.
现在,测试通过.当送给我的随机或确定性垃圾,我反而收到nil来自背部unarchiveObjectWithData,而不是例外.我已经检查了这个方法的文档,并且没有列出任何行为更改.
坦率地说,我发现这种行为变得非常可疑,因为没有提到这种变化是如何或为何发生的.我之前失败的单元测试刚刚过去,没有明显的原因.
这是新的预期行为(它返回nil)?如果没有,我如何获得实际的预期行为(Obj-C异常)而不是nil无效的归档?
这是我的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 ×10
ios ×6
objective-c ×5
cocoa-touch ×2
iphone ×2
nscoding ×2
swift ×2
xcode ×2
cocoa ×1
codable ×1
ios9 ×1
nsdata ×1
nsstring ×1
saving-data ×1
singleton ×1
sprite-kit ×1
swift2 ×1
swift4 ×1
uiview ×1