将NSLayoutConstraints保存到plist文件

时间:2014-01-30 11:59:31

标签: ios iphone objective-c nslayoutconstraint nscoding

我已经在我迄今为止完成的每个项目中都很好地实现了自动布局。所以我有一个非常好的理解,但当我想将自动布局对象保存到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>

0 个答案:

没有答案