2
我有一個tableView(這是一個具有大約11個領域的形式),tableViewController和我正在使用的類的實例是窗體的模型。 tableView控制器使用KVO更新模型進行更新。因此,而不是11如果是比較的keyPath串在我的觀察值的關鍵方法是這樣ELSE語句 -這會被認爲是良好的編程習慣,當使用KVO
- (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];
}
我不確定這是否被認爲是好的做法。
根本沒有問題 – 2013-04-11 11:32:59