0
我在反應本機ios應用程序中使用swift本機模塊從資產url生成動畫gif。它在第一次嘗試運作良好,但是當我逃離組件,並通過新的資產,它被用來一次後,該應用程序崩潰,有時會顯示此錯誤:React Native/Swift Native模塊只能工作一次
反應錯誤:
或有時Xcode的重定向我到此Objective-C的功能,告訴我,返回_instance沒有任何價值:
這裏是我打電話給我的本機模塊在我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);
}
}
他們的重要組成部分我的代碼,但我可以告訴你更多,如果你需要