ios - React Native/Swift Native 模块只能工作一次

标签 ios swift reactjs react-native objective-c-swift-bridge

我在我的 React Native ios 应用程序中使用了一个 swift native 模块来从 Assets url 生成动画 gif。第一次尝试时效果很好,但是当我转义组件并在使用一次后传递新资源时,应用程序崩溃,有时会显示此错误:

react 错误:

react error

或者有时 xcode 会将我重定向到这个 Objective-C 函数,告诉我要返回的 _instance 没有值:

objective-c error

这是我在 react 组件中调用 native 模块的方式:

callImages: function(){
var that = this
const imagesUri = this.parseImages();
var promise = new Promise(function(resolve, reject) {
  NativeModules.GifGenerator.initFunction(imagesUri, resolve)
});

promise.then(function(o) {
  base64 = "data:image/gif;base64,"+o.url
  imagesUri.push(base64);
  that.setState({images: imagesUri});
});
}

如何在 GifGenerator.m 中导出 swift 模块:

@interface RCT_EXTERN_MODULE(GifGenerator, NSObject)

RCT_EXTERN_METHOD(initFunction:(NSArray *)images 
                  callback:(RCTResponseSenderBlock)callback);

@end

我的 swift 类(class)的重要部分:

func initFunction(images : [String], callback: (NSObject) -> () ){

self.standardImages = images

return getImages(images, handler: self.generationCallback , someCallback: callback )
}

...
(getImages call generate passing the callback function to it)
...

func generate(mainHandler: (NSObject) -> () ) -> Void {

...
(movie to gif generation using AVAssetWriter)
...

videoWriter.finishWritingWithCompletionHandler { () -> Void in
        if error == nil {

          let resultUrl = self.videoToGif(videoOutputURL)
          let ImageData = NSData(contentsOfURL: resultUrl)
          let imageBase64:String =         ImageData!.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
          mainHandler([["url": imageBase64], ["error": "non"]])

            if let data = NSData(contentsOfURL: resultUrl) {
              let image = UIImage(data: data)
              UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil);
            }

        }

它们是我代码的重要部分,但如果您需要,我可以向您展示更多内容

最佳答案

我的猜测是,每次在 swift 端使用回调时,您都需要重置回调...因此,在您的 js 回调方法的警察处,将您的 js cb 重新注册到 swift..

关于ios - React Native/Swift Native 模块只能工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39484454/

相关文章:

ios - 我的字体大小不适用于我的自定义字体

reactjs - react 引导:Dropdown.item,onSelect 返回一个空目标

reactjs - 如何在 React 中获取 ChildNode 的宽度?

ios - 自动布局约束未按预期工作

ios - iOS7.1 LocationManager在进入后台时暂停(在7.0中有效)

ios - 无法使用 RestKit 0.20 从核心数据中删除实体

reactjs - 在 Netlify 上部署的 Gatsby Starter 上安装 'react-bootstrap'

ios - 为什么我的 UIViewController 顶部有 20px 的间隙?

ios - Docusign 快速集成

swift - 为什么我的默认属性值仍显示为 Init() 中的参数?