KVO 更新 UITableViewCell

Posted

技术标签:

【中文标题】KVO 更新 UITableViewCell【英文标题】:KVO update UITableViewCell 【发布时间】:2013-10-24 04:13:10 【问题描述】:

我有一个 ViewControllerA,您可以使用 AFNetworkingsetDownloadProgress 下载文件,以根据进度更新我的模型。我还有一个 ViewControllerB,它有一个 UITableView 以及所有传输的列表。

cellForRowAtIndexPath里面我观察我的模型

[transfer addObserver:cell
           forKeyPath:@"completed"
              options:NSKeyValueObservingOptionNew
              context:NULL];

这行得通,我可以像

一样阅读进度
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
    if ([keyPath isEqualToString:@"completed"]) 
        float val = [[change objectForKey:@"new"] floatValue];
        NSLog(@"%f", val);
    

但我不知道如何使用我的 KVO 更新我的 UITableViewCell?

【问题讨论】:

【参考方案1】:

我发现最简单的方法是将 UITableViewCell 子类化,并在那里添加您的观察结果。

@implementation MyCustomCell

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

    if ([keyPath isEqualToString:@"completed"]) 
        float val = [[change objectForKey:@"new"] floatValue];

        // assuming that you're trying to update a label within your cell
        self.progressLabel.text = [NSString stringWithFormat:@"%f %%", val];
        

【讨论】:

以上是关于KVO 更新 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

CLLocation 变量不发送 KVO - NSKeyValueObservingOptionNew

带有 NSPrivateQueueConcurrencyType 的 KVO

KVO 无限循环/循环

避免 RESTKit 调用的 KVO Obervers

刨根问底KVO原理

整理的一些iOS面试相关问题,持续更新,敬请关注