NSArray错误:“!表达式不可分配”

时间:2011-12-02 17:58:10

标签: objective-c xcode core-data

我创建了一个NSArray,我已初始化它以包含核心数据实体的属性。当我稍后尝试通过数组设置这些属性时,我得到错误“!表达式不可分配”。如何通过NSArray引用它们来设置属性的值?以下是我的代码的相关部分:

    headingArray = [[NSArray alloc] initWithObjects:
                heading1,
                heading2,
                heading3, ...

heading1,heading2,...是核心数据实体的属性

    for (int i=1; [note.headingCount intValue]-1; i++) {
    [note.headingArray objectAtIndex:i] = selectedTemplateForNote.heading1;
  }

[note.headingArray objectAtIndex:i]是标记错误的代码“!表达式不可分配”。

3 个答案:

答案 0 :(得分:3)

NSArray是不可变的。如果不构建新数组,则无法更改其内容。请尝试使用NSMutableArray- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;

根据新信息进行编辑:

您可能正在尝试执行以下操作:

NSManagedObject *entity = ...;
for (int i=1; [note.headingCount intValue]-1; i++) {
    [entity setValue:selectedTemplateForNote.heading1 forKey:[note.headingArray objectAtIndex:i]];
}

答案 1 :(得分:1)

在Objective-C中,您无法分配这样的值。您需要执行以下操作:

NSMutableArray* tempArray = [NSMutableArray arrayWithArray:note.headingArray];
for (int i=1; [note.headingCount intValue]-1; i++) {
    [tempArray replaceObjectAtIndex:i withObject:selectedTemplateForNote.heading1];
}
[note setHeadingArray:[NSArray arrayWithArray:tempArray]];

答案 2 :(得分:-1)

选择了什么类型的TemplateForNote.heading1?确保它是一个NSValue!