我已经在我迄今为止完成的每个项目中都很好地实现了自动布局。所以我有一个非常好的理解,但当我想将自动布局对象保存到plist文件时,我陷入了困境。
目前我写了以下代码
NSMutableArray *blueLabelConstraints = [[NSMutableArray alloc] init];
NSArray *blueLabel1 = [GFLayoutConstraint constraintsWithVisualFormat:@"H:[_blueLabel(>=123)]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_blueLabel)];
NSArray *blueLabel2 = [GFLayoutConstraint constraintsWithVisualFormat:@"V:|-[_blueLabel(228)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_blueLabel)];
[blueLabelConstraints addObjectsFromArray:blueLabel1];
[blueLabelConstraints addObjectsFromArray:blueLabel2];
[self.coordinatesPlist setObject:[NSKeyedArchiver archivedDataWithRootObject:blueLabelConstraints] forKey:@"BLUE_LABEL_CON"];
上面的代码我用来存档并生成我已经保存到plist的nsdata。写入文件并保存nsdata。 但是当我尝试取消归档并使用nslayout应用程序崩溃时。我以下面的方式取消归档:
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:[self getPlistPath]];
NSData *data = [dict objectForKey:@"BLUE_LABEL_CON"];
if (data) {
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"ARRAY _ %@",array);
[self.view addConstraints:array];
}
数组对象显示有NSLayoutConstraint *对象但是当我尝试打印或使用它们时,应用程序崩溃了exc_bad_access。
崩溃是因为NSLayoutConstraint不符合NSCoding协议。我应该怎么做来管理它。我想将NSLayoutConstraint对象放在一个文件中,也许是一个plist文件。有没有人知道如何解决这个问题或如何以任何方式实现相同目标。
提前致谢。
**编辑** 以下是我在添加约束时在xib中找到的代码行。有什么想法??
<constraints>
<constraint firstItem="YiE-Zu-JcX" firstAttribute="top" secondItem="1" secondAttribute="top" constant="21" id="jLB-A7-UBv"/>
</constraints>