Comments (14)
Nevermind, I thought that the method wasn't even running for some reason but it's definitely running. For some reason my code isn't updating some state like I thought it would. Still, is that the right way to expose an Obj-C method?
from react-native.
Hm, when I do NSLog(@"%x", teapotNode_);
it prints 0. I don't know Obj-C too well, but does it not crash when sending messages to a null pointer? Anyway, it does seem to be calling the method as a static method, not as an instance method. How do I expose an instance method?
EDIT: I'm assuming it's possible because inside RCTUIManager.m
it exports several instance methods. Some of them even reference self
. But I see nothing outside of RCT_EXPORT()
that sets the instance for the exporter...
EDIT2: Oh, I see in initWithJavaScriptExecutor
that it allocates a single instance of the class, so the class is meant to be a single module instance. Might be nice to have a way to register an existing instance as a module?
from react-native.
I don't know Obj-C too well, but does it not crash when sending messages to a null pointer?
No, it doesn't crash; it returns nil.
from react-native.
Ok.
I added a getModule
method on RCTBridge
so now I just do TeapotController *vc = [bridge getModule:@"TeapotController"];
after creating the root view. I'm sure this is not the right way to do it. But I hacked. And it was fun.
from react-native.
I think two things are going on here:
A) Not sure if you're already doing this, but your TeapotController
needs to conform to the RCTNativeModule
protocol in order to be registered with the bridge.
B) If a class conforms to the RCTNativeModule
protocol, it will be instantiated by the RCTBridge
for use in the RCTRootView
. Where do you set the teapotNode_
ivar?
from react-native.
The teapotNode_
is just a scene node object that is created in the viewDidLoad
controller method. I did add that protocol:
@interface TeapotController : GLViewController<RCTNativeModule> {
TeapotNode *teapotNode_;
BOOL tapIsValid_;
CGPoint lastDragPoints_[2];
CGPoint touchStartPoint_;
}
And it's all working fine. The problem is that the bridge instantiates the TeapotController class, but I don't see any way to get to it through the RCTRootView class. I had to add a method myself to dig into the internal modules and return the instance.
from react-native.
To leave a clearer comment about what is needed: we need to be able to access the modules (that are actually class instances) that the bridge creates to have a generic way of talking between iOS and JS. These classes will have state, and when a callback (say from user input) calls back into the iOS world we need access to it.
from react-native.
@jlongster mind updating the title of the issue to reflect what needs to be done here outside of documentation?
from react-native.
Are the discussed items here obsolete? I grep'ed for RCTNativeModule and initWithJavaScriptExecutor across the entire repo and found nothing.
from react-native.
@jaygarcia RCTNativeModule is now called RCTBridgeModule.
from react-native.
Thanks :) I should have replied to my comment. I have been able to grasp things now from the JS <> ObJC side. It wasn't easy, but with enough digging through the ReactKit code, I figured much of what I needed to out.
The Macros are simply genius. I wish the Cordova guys were smart enough to do that.
from react-native.
Hey @jaygarcia , see new guide at https://github.com/facebook/react-native/blob/master/docs/NativeModulesIOS.md. Let us know if you think something should be added there.
from react-native.
Should this be closed?
@frantic , i think the article is pretty air tight for the moment :)
from react-native.
Cool! :)
from react-native.
Related Issues (20)
- [!] Invalid hermes-engine.podspec file: [!] Unable to locate the executable cmake. HOT 8
- Android native module rejections are not instanceof Error HOT 1
- Could not find com.facebook.react:react-android:.:0.72.1 HOT 9
- Build issues with 0.71 RNSha256 XCode 15.3 HOT 4
- `fontVariant` doesn't work on iOS when using the new architecture
- UI problem with iOS floating keyboard in iPad. HOT 6
- TouchableWithoutFeedback does not support style HOT 1
- Cannot find EventEmitter for receivedTouches EventName[topTouchMove, topTouchEnd] on native library HOT 5
- RCTNativeAnimatedNodesManager.mm props is not a node HOT 1
- Unexpected scroll behaviors when using FlatList HOT 7
- When I integration react native with Existing Android Apps,I got a autolinking question. HOT 2
- Symbol not found: (_JSGlobalContextSetInspectable) HOT 2
- The directory ****/ios contains 2 projects HOT 3
- textInput props textAlign will cause long text to be cut off after the hyphen when out of focus and focus again
- close the first modal with animation, then open the second modal immediately, the second modal can't be showed HOT 2
- UI updates made from layout effect are flushed in separate UI transaction HOT 4
- Blob constructor is not spec compliant HOT 1
- [!] CocoaPods could not find compatible versions for pod "React-RCTAnimation": In Podfile: React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) HOT 3
- Build error in 0.73.6 HOT 3
- Fatal error "available height is undefined" when editing textinput the app closes HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-native.