That’s strange. Key-value notifications are sent directly from the observed object to the observer, so there isn’t really any way for another object to block them.
My guess is that the issue may involve the runloop, since it sounds like these libraries are running some kind of modal session. They might be running a nested runloop. When you invoke such a library, is it a synchronous or asynchronous call? That is, do you call “RunPaypalWorkflow” and when that call returns the workflow is done? Or do you call “StartPaypalWorkflow”, which returns immediately, and then later some kind of delegate callback tells you when it’s done? In the former case, there’s definitely a nested runloop going on.
There can be weird issues with nested runloops vs. code that uses perform-after-delay or perform-on-thread or NSTimers, all of which are scheduled on runloops. I’m not sure that’s what’s happening here, but I’ve had this happen in the past and this kind of smells like it.
Have you turned on CouchCocoa logging? If so, look for messages of the form
CouchLiveQuery: Starting…
and
CouchLiveQuery: ...Rows changed! (now %lu)
which are logged when notified that the database has changed, and then after the query object has loaded new rows, right before it triggers the KVO notification of its ‘rows’ property.
—Jens