Tag: key value observing

用NSMutableData iOS观察键值

在我的模型中,我有NSMutableData对象称为数据。 我想从另一个对象观察它,并在添加或删除数据时收到通知。 我知道这是一个多对多的关系,所以我不能使用普通的KVO,首先添加这个代码的观察者 [object addObserver:self forKeyPath:@"data" options:NSKeyValueObservingOptionNew context:NULL]; 然后在发送通知时执行observeValueForKeyPath:ofObject:change:context:方法。 我已经阅读了关键价值观察文件,并且发现了其他的文章。 使用KVO与NSNotificationCenter 观察 对可变数组的更改 & 观察NSMutableArray进行插入/删除它们都使用NSMutableArray作为示例。 这也是可能的NSMutableData? 我不明白我必须执行什么。 有人可以告诉我什么我真的必须实现在哪个类获得NSVutableData对象的KVO工作? 或者如果这是不可能的,另一个解决scheme? 非常感谢!

是否可以在目标C中为静态variables设置KVO通知?

我有类A,实例variables从caching的数据派生的属性,这个caching的数据被表示为一个单身,是A(它本质上是一个NSDictionary)的一部分。 不时,这个caching被修改。 发生这种情况时,我想让所有A实例在下次访问属性时从caching中提取新信息,或换句话说,使其属性内容无效。 到目前为止,手动通知每个实例(使用静态数组来跟踪成员)。 我不是粉丝。 通知中心可能有一个选项,但我宁愿尝试使用KVO。 有没有人设法订阅iOS上的类variables的KVO变化? (换句话说,使用来自A的静态variables的更改来告诉A实例刷新其数据。) 换句话说,我很想拥有 static void* context = &context; static myHadHocObject* msignal; 并在稍后的A类代码 [msignal addObserver:self forKeyPath:@"operation" options:NSKeyValueObservingOptionNew context:context]; 并通过一个类实例通知msignal的变化 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ } 我试过使用各种专门的课程,没有运气。 似乎我失去了一些东西。 指针是受欢迎的,谢谢!

在多对多关系中的KVO对象属性

我有一个由父<— >>子组成的核心数据对多关系。 我想build立一个键值观察机制,当任何一个Child对象的属性(例如firstName,lastName)改变时,它触发一个通知。 使用标准KVO语法时: [self.parentObject addObserver:self forKeyPath:@"children" options:NSKeyValueObservingOptionNew context:NULL] 这只会在关系本身被修改(即一个Child对象被添加或从关系中删除)时通知,而不是当这些Child对象之一的属性发生更改时。 显然这就是它的devise如何运作,所以没有什么错,但我怎样才能使用KVO来达到我想要的要求呢? 提前致谢!

我如何正确观察scrollView子类的contentOffset属性?

在我的iOS应用程序中,我正在观察对scrollView子类的contentOffset属性的更改。 我的观察者处理程序看起来像这样: – (void)observeContentOffsetHandler:(id)aContentOffset { NSLog(@"%@", aContentOffset); } 为了简单起见,我为了方便而select了该方法的参数。 我的NSLog'ging看起来像这样: -[MyScrollView observeContentOffsetHandler:] [Line 111] NSPoint: {296, 375} -[MyScrollView observeContentOffsetHandler:] [Line 111] NSPoint: {296, 389} -[MyScrollView observeContentOffsetHandler:] [Line 111] NSPoint: {295, 401} -[MyScrollView observeContentOffsetHandler:] [Line 111] NSPoint: {291, 415} 我需要使用x和y值,但是我不知道如何获取它们。 我已经试图将该身份证转换为CGPoint,不。 我试过把参数改成CGPoint,不行。 UPDATE 它变得更深。 @ mgold没有喜悦。 以下是我如何设置观察: self.contentOffsetObserver = [[[Observer alloc] initWithTarget:self action:@selector(observeContentOffsetHandler:)] autorelease]; [self.myScrollViewSubclass addObserver:self.contentOffsetObserver […]

键值观察UIButton的状态

UIButton有一个状态属性,它似乎是所有帐户KVO兼容,没有任何文件指出,否则。 然而,当我添加一个观察者到一个UIButton的状态属性,观察者callback从未被调用。 怎么来的?

NSFetchedResultsController的transient属性的NSSortDescriptor

好吧,我最初想让NSSortDescriptor根据NSManagedObject子类中的属性对NSSortDescriptor进行sorting,但显然不会这样做,因为NSFetchedResultsController仅限于在取出的实体上工作的谓词和sorting描述符关系,所以我决定在我的数据模型中创build一个transient属性,将这个属性的属性合成到我的NSManagedObject子类中,然后根据它进行sorting。 运行时,我得到了执行获取'NSInvalidArgumentException', reason: 'keypath isActive not found in entity <NSSQLEntity SMSourceEntity id=2>' 我知道这是KVO问题,所以我添加了+ (NSSet*)keyPathsForValuesAffectingIsActive ,但仍然有同样的问题。 我做错了什么,或者我仍然错过了一些东西,使其find我的keypath? 谢谢。 码: @implementation SMSourceEntity @dynamic friendlyName; @dynamic interfaceAddress; @dynamic uniqueID; @dynamic network; @synthesize isActive = _isActive; + (NSSet*)keyPathsForValuesAffectingIsActive { return [NSSet setWithObject:@"isActive"]; } @end 我的sortDescriptor: request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"isActive" ascending:NO] , nil];

cocoa键值观察字典中的键/条目

是否可以观察字典中的特定键? 如果是这样,我该怎么办呢?

uiwebview与页眉和页脚

我试图添加页眉和页脚(都作为UIViews ),但由于某种原因,我的页脚坚持到底部,我使用KVO方法来观看我的内容大小。 我在这里提出的方法,我认为这个问题是: – (void)updateLayout { // Update the frame of the header view so that it scrolls with the webview content CGRect newHeaderFrame = self.headerView.frame; CGRect newFooterFrame = self.footerView.frame; newHeaderFrame.origin.y = -CGRectGetMinY([self.webView convertRect:self.innerHeaderView.frame toView:self.webView.scrollView]); newFooterFrame.origin.y = self.webView.scrollView.contentSize.height; [self.headerView setFrame:newHeaderFrame]; [self.footerView setFrame:newFooterFrame]; if ([self didTapToFullScreen]) { // The delegate was already called in this case, […]

MKMapView不断地监视标题

我正在渲染一个位于我的MKMapView之上的图层中的一些内容。 除了旋转,整个事情都很好。 当用户旋转地图时,我需要能够旋转我在自己的图层中呈现的内容。 我发现的标准答案是使用: NSLog(@"heading: %f", self.mapView.camera.heading"); 问题在于标题variables的内容仅在捏放/旋转手势结束时才更新,而不是在手势期间更新。 我需要更频繁的更新。 mapView本身没有标题属性。 我想也许使用这样的KVO : // Somewhere in setup [self.mapView.camera addObserver:self forKeyPath:@"heading" options:NSKeyValueObservingOptionNew context:NULL]; // KVO Callback -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if([keyPath isEqualToString:@"heading"]){ // New value } } 然而KVO的听众从来不会发火,这并不奇怪。 有没有我忽略的方法?

iOS的MapKit拖动注解(MKAnnotationView)不再与地图平移

我正在学习在我刚刚起步的iOS应用程序中使用MapKit。 我正在使用一些模型实体作为注释(将<MKAnnotation>协议添加到它们的头文件中)。 我也创build自定义MKAnnotationViews并将draggable属性设置为YES 。 我的模型对象有一个location属性,它是一个CLLocation* 。 为了符合<MKAnnotation>协议,我向该对象添加了以下内容: – (CLLocationCoordinate2D) coordinate { return self.location.coordinate; } – (void) setCoordinate:(CLLocationCoordinate2D)newCoordinate { CLLocation* newLocation = [[CLLocation alloc] initWithCoordinate: newCoordinate altitude: self.location.altitude horizontalAccuracy: self.location.horizontalAccuracy verticalAccuracy: self.location.verticalAccuracy timestamp: nil]; self.location = newLocation; } – (NSString*) title { return self.name; } – (NSString*) subtitle { return self.serialID; } 所以,我有4个必要的方法。 而且他们非常简单。 当我阅读MKAnnotationView和@draggable属性中的苹果文档时,它说: 将该属性设置为YES可使用户拖放注释。 […]