- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 tableView(它是一个包含大约 11 个字段的表单)、tableViewController 和一个我用作表单模型的类的实例。 tableView Controller 通过使用 KVO 对模型的更改进行更新。因此,与其使用 11 个 IF ELSE 语句来比较我观察值中的键路径字符串,不如这样使用键方法 -
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keypath isEqualToSTring:@"name"]){
[self updateName];
}
else if([keypath isEqualToSTring:@"age"]){
[self updateAge];
}
etc,etc,etc...
}
我认为拥有这样的东西并遵循更新方法的命名约定会更干净
// KVO update methods name follow the naming convention "update<keypath>".
// The first character of the keypath should be capitalised.
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSString * firstCharacterOfKeyPath = [keyPath substringToIndex:1];
NSString * capitalisedFirstCharacterOfKeyPath = [firstCharacterOfKeyPath uppercaseString];
NSRange firstCharacterRange = NSMakeRange(0, 1);
NSString * capitalisedKeyPath = [keyPath stringByReplacingCharactersInRange:firstCharacterRange withString:capitalisedFirstCharacterOfKeyPath];
NSString * updateSelectorString = [[NSString alloc] initWithFormat:@"update%@",capitalisedKeyPath];
SEL updateSelector = NSSelectorFromString(updateSelectorString);
[self performSelector:updateSelector];
}
我不确定这是否会被视为良好做法。
最佳答案
我没有在您的代码中看到任何真正的问题,但是我会添加检查 self
是否响应选择器,以防止进一步崩溃:
if ([self respondsToSelector:updateSelector])
{
[self performSelector:updateSelector];
}
但就个人而言,我不太喜欢 KVO 方法。我不想说它不好,但它可能会产生不需要的错误。 IE。你应该记得正确地移除观察者,这在 UITableView 的情况下可能不是很简单。
我建议在这里使用委托(delegate)方法,尽管它看起来有点复杂,但对我来说听起来更可靠。
关于ios - 使用 KVO 时,这会被认为是良好的编程习惯吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15947586/
我编写的代码主要供个人使用,但我正在考虑发布我最初开发供个人使用的应用程序(科学模拟/可视化)。 我的一个习惯是在类中使用一个main方法来单独测试类的运行情况。我认为这在某种程度上可能是不好的(毫无
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How do I convince programmers in my team to do TDD? 在从
假设我想测试是否有一个名为“Z”的驱动器。第一步是这样的; Get-PSProvider | Select-Object -Property Drives 这个给我; Drives: ... {C,
这是对 an old answer to a question about the necessity of functools.partial 的一种跟进: 虽然这个答案非常清楚地解释了这种现象及其
Perl 习惯很难改掉。两种语言之间的变量声明、作用域、全局/局部是不同的。是否有一组推荐的 python 语言习语可以使从 perl 编码到 python 编码的过渡不那么痛苦。 细微的变量拼写错误
我是一名优秀的程序员,十分优秀!