gpt4 book ai didi

objective-c - 仅通过模型 Controller (API 包装器)更新模型对象的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-03 17:12:19 27 4
gpt4 key购买 nike

我有一个 iOS 应用程序,其中包含多个模型类和一个包装类,用于对我用作模型 Controller 的 Web 服务进行 API 调用。

这是一个简单模型对象的示例。

@interface Person : NSObject

@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;

+ (Person *)personWithFirstName:(NSString *)firstName lastName:(NSString *)lastName;

@end

为了从 Web 服务检索此对象,我有一个模型 Controller ,在其中实现了以下方法。

- (NSArray *)allPeople;
- (void)addPerson:(Person *)newPerson;
- (void)deletePerson:(Person *)newPerson;

目前这很棒。但是,我现在添加编辑功能,我也想将其包装在模型 Controller 中,但不确定构建此功能的最佳方法。显然,更新 Person 对象的最简单方法是直接访问对象的属性。但目前模型对象对 Web 服务一无所知,我想保持这种状态。我可以向模型 Controller 添加一个方法,例如

- (void)updatePerson:(Person *)person withFirstName:(NSString *)newFirstName

或类似的东西并使 Person 对象的属性只读,但这看起来不太直观。尽管如此,如果不将 Controller 代码添加到模型类中,我想不出任何其他方法可以做到这一点。这看起来是处理这种情况的适当方法吗?还有其他选择吗?

更新我不知道我上面在想什么,但我无法将模型对象上的属性设置为只读,因为模型 Controller 类需要以某种方式访问​​和更新这些属性。这意味着可以绕过 api 包装器直接更新 person 对象,这会很麻烦。有什么帮助吗?

最佳答案

首先,Person 属性不应该是只读的。您的 API 应该有一个带有以下签名的 updatePerson 方法:

- (void)updatePerson:(Person*)person;

您的人员应该有某种唯一的 ID,以便在您尝试更新时可以识别它。当您需要更新某人时,您将执行以下操作:

// first - create the object
Person *p = [[Person personWithFirstName:@"John" lastName:@"Appleseed"];
[apiObject addPerson:p];
// then you can update
p.fisrtName = @"Kate";
[apiObject updatePerson:p];

关于objective-c - 仅通过模型 Controller (API 包装器)更新模型对象的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19758540/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com