我在我的 react native ios 应用程序中使用 swift native 模块从资产 url 生成动画 gif。它在第一次尝试时运行良好,但是当我转义组件并在使用一次后传递新资产时,应用程序崩溃,有时会显示此错误:
反应错误:
或者有时xcode将我重定向到这个objective-c函数,告诉我要返回的_instance没有价值:
这是我在我的反应组件中调用我的本机模块的方式:
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
我的快速课程的重要部分:
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);
}
}
它们是我代码的重要部分,但如果您需要,我可以向您展示更多