Greg -- Thanks for your interest and sorry for not getting back to you sooner. When faced with a deadline last week, I simply modified the legacy class to run the implementation of the category method `-boolValueForKey:`, as I suggested.
Now that I have a brief opportunity, I tried to reproduce the failure in a test project, and naturally I couldn't. (I did a dummy implementation of the remote object proxy that created an NSDictionary and passed it to a handler block. This mimics the original code, where the dictionary is being returned as the result of an XPC call to another process.) If I get a chance to resurrect the original implementation so I can record the exact runtime exception message, I will. Right now I'm busy preparing to go to WWDC for the first time in a decade. (Will you be available, by any chance?) Thanks again -- Russell On Wed, May 24, 2017 at 6:03 PM, Greg Parker <gpar...@apple.com> wrote: > > > On May 23, 2017, at 1:10 PM, Russell Finn via swift-users < > swift-users@swift.org> wrote: > > I'm having an issue with an NSDictionary that is passing through Swift > code and back to Objective-C losing access to a method implemented by a > category on NSDictionary. There is clearly some subtlety about bridged > dictionaries that I'm missing, and I'd appreciate any clarification that > the list can provide. > > Specifically: I have a Swift 3 application that uses some legacy > Objective-C classes. One of these classes relies on a category on > NSDictionary that implements a method called `-boolValueForKey:`. > > In the main application, the Swift code calls a method on a remote object > proxy that returns an NSDictionary, which get bridged back to a Swift > dictionary (`[AnyHashable: Any]`). This bridged dictionary is passed to a > method on the legacy Objective-C class that calls the `-boolValueForKey:` > method from the category. At this point, a runtime exception occurs that > says the dictionary object (which at this point is a > `_SwiftDeferredNSDictionary`, according to the debugger) doesn’t recognize > the selector `-boolValueForKey:`. > > I can work around the issue in my code by modifying the legacy Objective-C > class and inlining the implementation of `-boolValueForKey:` — but is there > a better general approach? > > > This should work. _SwiftDeferredNSDictionary is a subclass of NSDictionary > and should inherit all of NSDictionary's categories. > > What is the exact exception you get? > > > -- > Greg Parker gpar...@apple.com Runtime Wrangler > > >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users