- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我先描述一下我的问题。我有一个包含 NSMutableDictionary ivar 的类。有一个线程会将新对添加到该字典中 - 在编写应用程序时,我无法获得可用键的完整列表。所有这些对的最新列表必须显示在 TableView 中。我准备了一个小的概念验证应用程序,其中在 xib 文件中创建了一个字典 Controller ,并且其内容与字典 ivar 绑定(bind)。问题是 TableView 仅显示字典内容的初始集。插入后不刷新。
在我的概念验证应用程序 AppController.h 中,如下所示:
#import <Foundation/Foundation.h>
@interface AppController : NSObject
@property (strong) NSMutableDictionary *dictionary;
- (NSString *)randomString;
- (IBAction)addRandomPair:(id)sender;
@end
以及实现文件内容:
#import "AppController.h"
@implementation AppController
@synthesize dictionary = _dictionary;
- (id)init {
self = [super init];
if (self) {
_dictionary = [[NSMutableDictionary alloc] init];
[_dictionary setValue:@"Aa" forKey:@"A"];
[_dictionary setValue:@"Bb" forKey:@"B"];
}
return self;
}
- (NSString *)randomString
{
NSMutableString *aString = [[NSMutableString alloc] init];
for (int i = 0; i < 3; i++) {
NSUInteger r = random() % ('z' - 'a');
[aString appendString:[NSString stringWithFormat:@"%c", ('a' +r)]];
}
return aString;
}
- (IBAction)addRandomPair:(id)sender
{
[self.dictionary setValue:[self randomString] forKey:[self randomString]];
NSLog([self.dictionary description]);
}
@end
字典 Controller 内容绑定(bind)到应用程序 Controller ,模型键路径设置为“self.dictionary”, TableView 中的列内容绑定(bind)到字典 Controller ,模型键路径设置为相应的键和值。在此概念证明应用程序按钮中,单击添加一个新对(addRandomPair:操作)。
我在使用 NSMutableArray 和数组 Controller 时遇到了类似的问题,但是我可以通过向包含数组 ivar(此类中的命名数据)的类添加以下一对方法来解决该问题:
- (void)insertObject:(NSString *)object inDataAtIndex:(NSUInteger)index;
- (void)removeObjectFromDataAtIndex:(NSUInteger)index;
是否可以向保存字典的类(AppController)添加一些其他方法,以获取有关新插入的通知?或者也许有更好的解决方案来解决我的问题?
我发现实现以下一组访问器可以使字典 Controller 收到有关新项目的通知:
- (void)addDictionaryObject:(NSString *)object;
- (void)removeDictionaryObject:(NSString *)object;
问题是 addDictionaryObject:
只有一个参数,字典需要类似 addDictionaryObject:forKey:
的东西。有什么想法吗?
除了使用手动更改通知之外,我没有看到任何其他解决方案 - 在本例中 addRandomPair:
方法如下所示:
- (IBAction)addRandomPair:(id)sender
{
[self willChangeValueForKey:@"dictionary"];
[self.dictionary setValue:[self randomString] forKey:[self randomString]];
[self didChangeValueForKey:@"dictionary"];
NSLog([self.dictionary description]);
}
它有效,但我仍然有点不确定,因为字典本身不会改变,但它的内容会改变。 使用手动更改通知是正确的方法吗?
最佳答案
来自Key-Value Coding methods文档中,To-Many 属性仅支持 NSMutableArray
或 NSMutableSet
。由于 KVC 已经可以使用键,因此支持 NSMutableDictionary
是多余的,因为它实际上是 setValue:forKey:
已经做的事情。
如果您确实希望在一次调用中实现这一点,则可以覆盖 setValue:forKeyPath:
。
关于objective-c - NSMutableDictionary 和新项目插入 KVO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8168762/
当我的应用程序关闭时,主 Controller 类将其自身作为观察者从模型中删除,然后释放模型。像这样: - (void)dealloc { [theModel removeObserver:
我正在努力加深对这些机制的理解。我有一个启用触摸的 UIView,可以更新它自己的 center 属性。 我的理解是frame属性是center和bounds的合成函数。假设这是真的,我将一个观察者放
我正在尝试使用 KVO 来观察在我的页面 View Controller 的子内容 View Controller 的 ScrollView 中使用拖动时的更新变化,但是当应用程序启动时,它崩溃了说:
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我尝试使用 KVO 观察 UIView 子类上的属性,以便通过调用 drawRect: 触发绘制。在我的 initWithFrame: 中,我有这个: ... self.observedKeysTha
我以前使用过 NSNotifications,但这是我第一次尝试在 Cocoa Touch 中使用 KVO。 我的 UITableView Controller 在各种数据源之间切换,因此我将它们封装
我遇到了 KVO 问题,但我不知道它是什么。 我有一个可用于编辑或创建记录的屏幕。该记录由一个模型对象表示,该对象包含许多 NSString 类型的变量。 该字符串的 Controller 有一个实例
这个问题已经有答案了: In Cocoa KVO, why doesn't a change on a NSMutableArray proxy notify observers? (1 个回答) 已
当我想观察保留属性的变化时,我经常遇到这样的情况: @interface AnObserver {…} @property(retain) Foo *foo; 现在,当我想要设置观察时,我需要编写自己
我定义了两个具有相应 ivars 的属性并合成了它们: @property (nonatomic,copy) NSString* title; @property (nonatomic,copy) N
我试图掌握绑定(bind),并在 xcode 中设置了一个带有 CPTextView 的 CPWindow,并将窗口和 textview 绑定(bind)到它们各自的导出。 我有点卡住了,但是试图让
一定有一些我对 KVO 没有了解的地方,我试图通过滚动 UIScrollView 来滚动 UITableView,偏移量转换是正确的,但是 UITableView 滚动发生在 UIScrollView
我正在学习 MVVM,所以我在属性上添加了观察者 init(model: RegisterUserModel = RegisterUserModel()) { self.registerMo
我的 iPhone 应用程序核心数据属性的自定义访问器方法有问题。我想做的不仅仅是取出原始类型并返回它。我有一个可能的 activityTypes 的 NSSet,如果对象没有 primitiveTy
事情是这样的:我有一个单例监视设备的事件存储的变化。我有一个名为 events 的属性,我已将其包装在 eventsSignal RACSignal 中。 _eventsSignal = [RACAb
我得到的 iOS 应用 实体很少,它们由关系链接。举一个简单的例子,假设我们有这样的关系(一对多): company > person 我正在使用 xcode 4.6 和用于模型生成的核心数据建模工具
我在 iOS 应用程序中遇到 KVO 问题。我似乎无法正确处理。我正在尝试做什么: 我有一个 MenuViewController(可在左侧显示,如 facebook 应用程序)观察(并显示)全局值。
我试图通过以下代码从其他对象观察 UIViewController 的 KVO 的界面方向: [((UIViewController *)self.delegate) addObserver:self
我正在尝试使用 KVO 在 UILabel 和对象数据之间创建一个小型绑定(bind)系统。如果我的 UI 发生变化,我的数据也必须发生变化,如果我的数据发生变化,我的 UI 应该刷新以显示新值。 我
如果我在我的 iOS 应用程序上设置了本地通知,我将更新一个按钮。我想用 KVO 做到这一点,因为可以通过多种方式设置通知,所以我将无法轻松跟踪本地通知何时发生更改,否则。 我是这样设置的:
我是一名优秀的程序员,十分优秀!