BreezeJS如何跟踪属性变化
我很好奇Breezejs如何确定实体的哪些属性已更改并仍然支持IE8? 我需要与我正在构建的库相似的功能. JavaScript设置器/获取器将是最简单的解决方案,但是它们不支持IE8中的非dom对象. 他们是否正在使用: https://gist.github.com/eligrey/384583/a >:还是其他? 解决方案 它取决于使用的"模质",用于骨干和敲除微风,使用基础基因敲除或骨干对象的"可观察性".对于像Angularjs之类的东西,在不需要基础对象支持可观察性的情况下,Breeze使用其" BackingStore"模型库,该库具有与对象非常相似的操作.您在问题中指出的观察实现. " BackingStore"实现,例如Object.上面的观察实现将在IE8上不起作用,因为没有支持JavaScript" DefineProperty". 希望这会有所帮助.
14 2024-04-03
编程技术问答社区
Cocoa。在控制绑定中避免'持续更新'。
我有几个面板,其中包含NSTextField控件绑定到文件所有者对象中的属性.如果用户编辑一个字段,然后按 tab 移至下一个字段,则可以按预期工作.但是,如果用户不按下 tab ,然后按确定按钮,则未在文件的所有者对象中设置新值. 为了解决此问题,我已经在绑定中连续设置了 ,但这一定很昂贵(或者至少是不贵的). 按下确定按钮而不是连续使用更新? 时,是否有一种方法强制绑定更新 解决方案 您不需要连续更新值选项. 如果您使用的是绑定(您是),那么您应该做的是调用正在管理绑定的NSController子类的-commitEditing方法.通常,您会在关闭要显示的表格的方法中执行此操作. -commitEditing告诉控制器在活动控件中完成编辑,并将当前编辑提交给界对象. 每当您执行持久操作(例如保存)时,最好打电话给它. 其他解决方案 解决方案是在OK按钮调用的操作方法中"结束编辑".由于窗格是NSWindowController的子类,因此
16 2024-03-31
编程技术问答社区
我如何从Objective C KVO的observationInfo方法中获得信息?
有observationInfo方法返回对象绑定的信息.我环顾四周,但我不知道如何从字典中获取信息.任何人都可以带我朝正确的方向前进吗? 编辑 如果有人误解我说的.我的课程已经符合KVO.现在,将观察者添加到something对象之后,self.something现在将具有绑定信息.如果我做了[self.something observationinfo],则会返回词典.我想访问该字典的内容. 苹果文档说 为了提高性能,此方法和setObservationinfo:可以是 覆盖将不透明的数据指针存储在实例变量中. 该方法的覆盖不得尝试发送Objective-C消息 到存储的数据,包括保留和发布. 所以我知道可以做到.我的问题是如何?我看到没有任何信息. 解决方案 我怀疑您误解了-observationInfo/-setObservationInfo:的目的.这些方法设定和获得的价值对您来说是不透明的.换句话说,它的内容是系统框架的私人,您无意访问/解析它.
4 2024-03-31
编程技术问答社区
即使在player.status == .readyToPlay之后,AVPlayerItem.duration仍然返回为NaN。
我有一个在player上使用kvo的实施. -in-swift">在这里. 这是相关位: var player: AVPlayer? var url = URL(string: "some video url")! override func viewDidLoad() { super.viewDidLoad() initializeVideoPlayer() } func initializeVideoPlayer() { let playerItem = AVPlayerItem(url: url) self.player = AVPlayer(playerItem: playerItem) let playerLayer = AVPlayerLayer(player: player) playerLayer.frame = self.view.layer.bounds videoView.layer.add
14 2024-03-21
编程技术问答社区
Swift -AVPlayer'单元格中的KVO'父vc导致Xcode冻结
我有一个占用整个屏幕的单元格,因此一次只有1个可见单元格.在牢房内,我有一个Avplayer.在单元的父vc中,我有一个倾听"timeControlStatus"的KVO观察者.当播放器停止播放时,我在单元格内调用函数stopVideo()停止播放器并显示重播按钮或播放按钮等. 3问题: 1-当视频停止/到达时,如果我不使用kvo内部的discatchqueue,则在调用单元格函数时,应用程序崩溃了. 2-当视频停止时,我确实在kvo内使用了discatchqueue,它的观察者会不断观察和xcode冻结(无崩溃). KVO内部有一个打印语句,可以无限期地打印,这就是Xcode冻结的原因.停止它的唯一方法是杀死Xcode,否则死亡的沙滩球一直在旋转. 3-在KVO中,我试图使用通知将其发送到单元格代替调用cell.stopVideo()函数,但是单元格内的功能永远不会运行. 我该如何解决此问题? 应该注意的是,在KVO之外,其他所有操作都可以正常工作.
6 2024-03-21
编程技术问答社区
如何处理AVPlayer的流媒体错误
我使用avplayer来流轨道. 但是我找到了这种错误的任何处理程序. 我已经为Avplayer的状态添加了一个KVO. [self.player addObserver:self forKeyPath:@"status" options:0 context:nil]; ,但即使流不存在(示例:错误的URL),状态切换到AvplayerStatusreadyToplay. 编辑 解决方案是使用AvplayerItems并使用Avqueuplayer.另一个问题是我在每个轨道上都重新分配了这个球员. 解决方案 也将KVO添加到AvplayerItem,而不是使用NSKeyValueObServingOptionNew. [playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:NULL]; [self.player
10 2024-03-21
编程技术问答社区
Swift 4切换到新的观察API
我在Swift 4中的新observe API遇到麻烦. player = AVPlayer() player?.observe(\.currentItem.status, options: [.new], changeHandler: { [weak self] (player, newValue) in if let status = AVPlayer.Status(rawValue: (newValue as! NSNumber).intValue) { } } 但是我有一个错误 表达的类型是模棱两可的,没有更多上下文. 我该如何修复?不确定keyPath语法. 在上面的闭合中提取avplayerstatus也有警告 从'nskeyvalueobservedChange'到无关类型的'nsnumber'总是失败的 解决方案 currentItem是AVPlayer的可选属性.以下编译 在Swift 4.2/Xcode 10
8 2024-03-21
编程技术问答社区
TorchLevel KVO-iOS
我正在使用iOS中的Avoundation来操纵iPhone 6上的火炬.我需要知道当前的火炬水平. 我已经阅读 appledevlib 可以使用KVO观察当前的火炬级别,但我未能实现它. 您可以放下一些检测火炬级别更改然后更改变量的样本(例如屏幕上的标签等)吗?这将对我有很大帮助. 解决方案 我花了一段时间才弄清楚如何做到这一点,但我相信此KVO代码对您有用.我尚未对此代码进行彻底测试,但我确实使其基本上在应用程序中工作: static void * const torchLevelObservationContext = (void*)&torchLevelObservationContext; - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { i
6 2024-03-21
编程技术问答社区
对于视频播放器的这种Avoundation KVO模式有什么问题[参考:Avplayerlayer,AvplayerItem,Avurlasset]?
我写了一个Uiview子类" VideoPlayerView",以封装Avoundation视频播放.我相信我设置了一个防弹性KVO模式,以处理对Avplayer,AvplayerItems和Avurlassets的观察,以便加载,播放和错误处理. 相反,我发现撞车事故报道说,这种模式是专门为防止(但很少报道)而设立的. a) 实例0x170019730 avplayerItem的class avPlayerItem进行了交易,而键值观察者仍未注册. b)[videoplayerview setPlayerItem:] 无法从avplayeritem中删除关键路径"状态"的观察者videmoplayerview,因为它未注册为观察者. c)[videoplayerview setAsset:] 无法删除观察者videeroplayerview 0x145e3bbd0,用于关键路径"可播放" 0x1702333780,因为它未注册为观察者./p> 我想了解为什么这
28 2024-03-21
编程技术问答社区
在DealLoc AvcaptureVideOpreviewlayer中罕见的崩溃
在客户端手机上很少会在摄像机DealLoc期间复制崩溃 Fatal Exception: NSRangeException Cannot remove an observer for the key path "changeSeed" from because it is not registered as an observer. Thread : Fatal Exception: NSRangeException 0 CoreFoundation 0x000000018449259c __exceptionPreprocess + 132 1 libobjc.A.dylib 0x0000000194be40e4 objc_exception_throw + 60 2 CoreFou
24 2024-03-21
编程技术问答社区
在后ARC时代的Cocoa中删除观察员
到目前为止,我一直在DealLoc中删除观察者(通知或KVO).由于DealLoc在ARC中消失了,建议这样做的建议是什么? 解决方案 -dealloc在弧线下没有消失.伊瓦尔(Ivar)释放和超级呼叫方面是自动处理的,如果您要这样做,则可以省略它,但是如果这样做有意义,您仍然应该将其实施. >
KVO和ARC如何删除Observer
如何从 arc 下删除观察者?我们只是添加观察者而忘记删除它吗?如果我们不再手动管理记忆,我们从哪里辞职? 例如,在视图控制器上: [self.view addObserver:self forKeyPath:@"self.frame" options:NSKeyValueObservingOptionNew context:nil]; 以前,我会在视图控制器的dealloc方法中调用removeObserver: 解决方案 您仍然可以在ARC下实现-dealloc,这似乎是删除观察钥匙值的合适场所.您只是不再在此方法中调用[super dealloc]. 如果您以前是在覆盖-release,您以错误的方式做事. 其他解决方案 我使用此代码 - (void)dealloc { @try{ [self.uAvatarImage removeObserve
20 2024-03-21
编程技术问答社区
Google Tag Manager在观察 "dataLayer "阵列时使用的模式是什么?
我观察到dataLayer数组,我看不到push的任何更改.实际上根本没有自定义方法. GTM如何观察数组的变化?据我所知,更改Array不要扔任何事件,是吗? 编辑: 我做了更多的研究,发现了Google的库与dataLayer互动: https://github.com/google/data-layer-helper#listing-for-messages 我会看看代码,甚至可能会回答我自己的问题,如果我了解内部工作. 解决方案 GTM使用的模式是 Publish / subscriber 代码中的一些细节有助于识别它: https://github.com/google/data-layer-helper/blob/master/src/src/helper/helper/helper.js 最后一行114和119 // Add listener for future state changes. var oldPush = data
Swift中的键值观察不能显示数组中的插入和删除信息
我创建了一个包含数组的类.我在视图控制器中将观察者添加到该数组中,并对该数组进行了一些修改. 问题是,当我打印由ObserveValueForkeyPath()方法返回的更改字典时,我只能看到nskeyvaluechangechangepting的更改.换句话说,该方法告诉我数组已经更改,为我提供了旧数组(包含所有元素),但我想接收到添加或删除哪些特定项目的信息. 这是一些示例代码. 这是将观察到数组的类. private let _observedClass = ObservedClass() class ObservedClass: NSObject { dynamic var animals = [String]() dynamic var cars = [String]() class var sharedInstance: ObservedClass { return _observedClass }
12 2024-03-04
编程技术问答社区
Swift 4使用KVO监听音量变化
我刚刚更新到Swift 4和Xcode 9,并在以下代码中收到了(SwiftLint)警告,告诉我我现在应该使用KVO: 警告: (基于块的KVO违规:更喜欢基于块的KVO API 使用Swift 3.2或更高版本时键盘. (block_based_kvo)) 旧代码: override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if keyPath == "outputVolume"{ guard let newKey = change?[NSKe
8 2023-12-20
编程技术问答社区
为什么KVO保留了所有NSMutableArray#39;s对象?
我有一个真正的痛苦,试图弄清楚KVO为什么要保留所有观察到的值. 方案:我有一个nsmutablearray,参考较弱. (使用CfArrayCreateMutable和回调设置为无效保留和释放).意味着添加的任何对象永远不会保留/释放. 我有一个nsarrayController观察Nsmutablearray的值. 但是现在,也保留了nsmutablearray的每个对象.为什么会发生这种情况,我该如何停止? 解决方案 您如何知道某些东西保留了这些对象?您不是在看 - retainCount,是吗?如果是,请不要那样做. 如果您阅读了有关 kvo的工作方式,您会发现幕后产生了一些对象当您开始观察对象时.您确实不需要知道或考虑这些对象就可以成功使用KVO-的确,您 都不知道 - 但是您也不应该担心谁自己可能会或可能不会保留事物.
10 2023-12-19
编程技术问答社区
使用NSMutableData iOS观察关键值
在我的模型中,我有NSMutabledata对象称为数据.我想从另一个对象观察它,并在添加数据或删除数据时获取通知. 我知道这是一种善良的关系,因此我首先使用此代码添加观察者 ,我无法使用普通KVO [object addObserver:self forKeyPath:@"data" options:NSKeyValueObservingOptionNew context:NULL]; ,然后在发送通知时实现observeValueForKeyPath:ofObject:change:context:进行操作的方法. 我已经阅读了有人可以告诉我,我必须在哪个类中实现什么才能使nsmutabledata对象的工作?或者,如果不可能,另一个解决方案? 非常感谢! 解决方案 KVO有一个常见的误解:不可能观察到其他符合KVO的属性的内部状态. NSDATA就是这样:从KVO的角度来看,您的对象的数据属性不会改变,正是其NSDATA的状态改变了.如果
18 2023-12-19
编程技术问答社区
KVO在Swift中工作一次
我试图在Swift中使用KVO,但是"观察Valueforkeypath"的方法一次. 这是我的代码的要点 我尝试使用NSNumber而不是Int,将所有选项添加到addObserver中,但是当我的视图加载时,该方法仍然是一次调用. 有什么想法吗? 编辑:似乎我找到了一个临时解决方案: var lifes: Int { willSet { willChangeValueForKey("lifes") } } 解决方案 kvo需要动态调度,因此需要将修饰符添加到属性: dynamic var lifes = 0
8 2023-12-19
编程技术问答社区
在swift中使用KVO观察contentSize(CGSize)
我正在尝试观察collectionView.contentSize这样的人: func startObserveCollectionView() { collectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old.union(NSKeyValueObservingOptions.New), context: &SearchDasboardLabelContext) } override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) { if context == &SearchDasboardL
20 2023-12-18
编程技术问答社区
在mergeChangesFromContextDidSaveNotification之后的KVO通知
我正在使用KVO观察NsmanagedObject上的更改.我要观察到的nsmanagedObject是主要队列上的NSManageBject上下文的一部分. 当我在A background (私人队列并发类型)中更新此对象时,然后将保存的更改合并到我的主要队列上下文(在MergechangesfromContextDidsavenotification中),KVO Notifications filed fird fird. 但是,我希望通知只会为实际更改的关键路径开火,并且对于NSManageBject的所有键盘, .我正在收到我对象的每个键盘的KVO通知,即使它们没有改变. 是设计还是我做错了什么? 在Apple Docs中看不到任何内容.. 解决方案 它是无证的,但在OS X和iOS上观察到的行为,保存将其视为对整个NSManagedObject的更改,而不仅仅是不同的元素.您可以在openradar.appspot.com上找到有关绑定等各种后果的抱
2 2023-12-18
编程技术问答社区