2016-09-14 68 views
0

我在反應本機ios應用程序中使用swift本機模塊從資產url生成動畫gif。它在第一次嘗試運作良好,但是當我逃離組件,並通過新的資產,它被用來一次後,該應用程序崩潰,有時會顯示此錯誤:React Native/Swift Native模塊只能工作一次

反應錯誤:

react error

或有時Xcode的重定向我到此Objective-C的功能,告訴我,返回_instance沒有任何價值:

objective-c error

這裏是我打電話給我的本機模塊在我REAC t分量:

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}); 
}); 
} 

如何導出我的SWIFT模塊GifGenerator.m:

@interface RCT_EXTERN_MODULE(GifGenerator, NSObject) 

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

@end 

而且我迅速類的重要提示部分:

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); 
      } 

     } 

他們的重要組成部分我的代碼,但我可以告訴你更多,如果你需要

回答

0

我的猜測是你需要重置你的回調每次它我在快速的一面使用...所以在你的js回調方法的警察,重新註冊您的js cb迅速..