- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个与成员类具有一对多关系的托管对象。当我为成员添加观察员时,它起作用了。当一个新成员被添加到关系中时,将使用新对象调用 observeValueForKeyPath 并更改包含新成员对象的字典。但是,将第二次触发 observeValueForKeyPath,所有值为 nil 并更改字典 new="NULL"。第二个触发点是什么?我设置了一个断点,但不确定是谁触发的。
@interface FooObject : NSManagedObject {}
@property (nonatomic, strong) NSString *fooId;
@property (nonatomic, strong) NSSet* members;
@end
@implementation FooObject
@dynamic fooId;
@dynamic members;
- (NSMutableSet*)membersSet {
[self willAccessValueForKey:@"members"];
NSMutableSet *result = (NSMutableSet*)[self mutableSetValueForKey:@"members"];
[self didAccessValueForKey:@"members"];
return result;
}
- (void)registerObservers {
[self addObserver:self
forKeyPath:@"members"
options:NSKeyValueObservingOptionNew
context:nil];
}
- (void)unregisterObservers {
@try{
[self removeObserver:self forKeyPath:@"members"];
}@catch(id anException){
//do nothing, obviously it wasn't attached because an exception was thrown
}
}
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
id valueNewSet = [change objectForKey:NSKeyValueChangeNewKey];
if (![valueNewSet isKindOfClass:[NSSet class]]) {
// not a NSSet, it contains <null> value
NSLog(@"%@", change);
NSLog(@"%@", object);
}
if ([[change objectForKey:NSKeyValueChangeKindKey] intValue] == NSKeyValueChangeInsertion) {
// insert change is valid, process the changes
}
}
@end
日志输出:
{
kind = 1;
new = "<null>";
}
<FooObject: 0xfa9cc60> (entity: FooObject; id: 0xfa9be00 <x-coredata://39DB31FD-6795-4FDE-B700-819AB22E5170/SHInterest/p6> ; data: {
fooId = nil;
members = nil;
})
编辑 1我在 NSLog(@"%@", change) 设置了一个断点;这是堆栈跟踪,但对于确定调用者是谁没有真正帮助。
main -> UIApplicationMain -> NSKeyValueNotifyObserver -> observeValueForKeyPath:ofObject:change:context
编辑 2也许这仍然是一个错误? http://www.cocoabuilder.com/archive/cocoa/182567-kvo-observevalueforkeypath-not-reflecting-changes.html
最佳答案
我遇到了同样的问题,其中“隐式”分配(以及因此 KVO 观察者的通知)显然仅作为解除分配 MO 的一部分发生:我保存一个子 MOC,然后释放它,然后 iOS 释放它的 MO .我假设它随后在解除分配相关 MO 的过程中将一对多关系临时设置为 NSNull
(删除规则级联适用)。
因此,除了更改插入和删除类型之外,我的 KVO 观察器现在还接受 NSKeyValueChangeSetting
并断言 change[NSKeyValueChangeNewKey] == NSNull.null
。称之为务实的解决方案。
关于objective-c - KVO for one-to-many but NSNull object passed into observeValueForKeyPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11835607/
我遇到内存管理问题,无法在 iOS 上解决问题。我正在从 SQLite 数据库获取数据,其中某些单元格可能为空。因此,为了处理这种情况,如果为空,我将 [NSNull null] 分配给我的收件人,如
在我们的项目中,当网络上有东西返回 JSON 时,我们的 iPhone 应用程序偶尔会崩溃,其中包含 nil。当然,我们确实有一个帮助类,它负责处理此类问题。然而,人们很容易出错,并且确实在 NSDi
在苹果的例子中我看到了这个: myController *controller = [viewControllers objectAtIndex:page]; if ((NSNull *)contro
我在尝试显示标签时收到 [NSNull rangeOfCharacterFromSet:]: 异常。错误显示 'NSInvalidArgumentException', reason: '-[NSNu
我有一个简单的 NSMO,它有一个关系字段。有时我需要删除关系但保留对象。这是对象,它与 Person 具有一对一关系(person 与 LineUp 具有一对多关系): @objc (LineUp)
赏金事件只剩一天了! 您能否让自定义动画属性与 UIView animateWithDuration block 语法一起使用? 我一直致力于为自定义 CALayer 上的自定义动画属性创建我自己的隐
我正在尝试将字符串设置为“如果 [object objectForKey@"display_name"] 为 NULL,则不显示名称”。它在日志中崩溃了 2011-06-16 10:58:36.251
是否有可能让 Core Data 允许分配 NSNull?我正在使用 JSONKit它默认分配 NSNull。我希望能够像这样进行反序列化: - (void)deserialize:(NSDictio
针对iOS应用进行编码,我发现有潜在的原因禁止继承NSNumber,NSNull,... blabla。 如果我尝试这样做,编译器不会失败,但是运行会立即崩溃,而没有任何使用信息,有人知道原因吗? 最
我在错误消息中收到了以上内容。 [NSNull getCharacters:]: 我在文档中找不到它。谁能给我解释一下这是什么意思? 非常感谢。 编辑:这与链接到的关于 NSNull getChara
当使用键值编码在 NSArrays 上使用集合运算符(例如 @min、@max)时,如果出现以下情况之一,我会得到一个异常数组中的值为 NSNull null。 在使用 valueForKeyPath
我在以前的开发人员离开后转移到的项目中有以下 block NSObject *object = (NSObject *)string; if([object isEqual:[NSNull null]
我有一个循环,第一次运行良好,但第二次运行时我得到: -[NSNull count]: unrecognized selector sent to instance 0x3a094a70 *** T
if let action = self.info?["action"] { switch action as! String { .... } } else {...
我有一个这样结构的数组, [ { "Id": 20, "Name": "Name String", "Email
我实际上是在尝试在 Xcode8.1 上使用 Swift3 解析 Json 对象。这是我的代码: if let objData = objJson["DATA"] as! NSDictionary?
allItems是 NSMutableArray当用户单击加号按钮时,方法 createItem被叫。我试图只为每个偶数索引添加对象(类 BNRItem ),所以我尝试放置 NSNull 的实例对于奇
我的 iPhone 应用程序崩溃,出现以下错误: [724:95876] *** Terminating app due to uncaught exception 'NSInvalidArgumen
我有可能包含对象的 JSON 响应。在我的模型对象中,我这样做: _price3 = self.serverData[@"price3"]; 我想做类似的东西: _price3 = self.se
我遇到了这个异常,但我无法找出问题所在。 我尝试添加异常断点和符号断点,但它没有显示任何更有用的数据。它在 main.h 返回时崩溃,回溯中没有任何内容 这是异常(exception): 20
我是一名优秀的程序员,十分优秀!