向 NSObject 键添加值 - 表达式不可赋值

Adding value to NSObject key- Expression is not assignable

提问人:rammusThamennace 提问时间:4/27/2022 最后编辑:WillekerammusThamennace 更新时间:4/28/2022 访问量:33

问:

我正在尝试将从 API 调用中返回的值添加到 Objective-C 中的对象。我在 Xcode 中收到一个错误,说“表达式不可分配”,不明白为什么。在我的中,我有一个带有值的对象,我正在尝试为 设置值。我在这种方法中做错了什么?carObjwarrantyPlannilwarrantyPlan

NSArray *carUUIDs = [carData valueForKeyPath:@"uuid"];
NSString *ownerUUID = ownerRecord[@"uuid"];
if (ownerID) {
    NSManagedObjectContext *context = [DataCenter viewContext];
    NSObject *carObj = [context objectsForEntityName:[CarObject entityName] matchingUUIDs:carUUIDs];
    
    for (id carID in carUUIDs){
        [WarrantyPlansService getWarrantyPlansForCarWithCarID:carID ownerID:ownerUUID completion:^(NSArray* response, NSError* error){
            //attach the response to the carData
            NSLog(@"%@", [carObj valueForKeyPath:@"warrantyPlans"]);
            [carObj valueForKeyPath:@"warrantyPlans"] = response;
        }];
    }
数组 swift objective-c core-data

评论


答:

0赞 Shadowrun 4/27/2022 #1

[carObj valueForKeyPath:@"warrantyPlans"]是一个具有值的表达式,就像字面上是一个具有值的表达式一样。它不是这样的表达式,而是一个值为 42 的变量,可以通过在等号的左侧使用它来更改。42foo

要更改它,您需要:

[carObj setValue:response forKeyPath:@"warrantyPlans"]

在 KeyValueCoding 指南中,这两个称为泛型 getter 和泛型 setterhttps://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueCoding/index.htmlvalueForKey:setValue:forKey: