Модуль React Native / Swift Native работает только один раз

Я использую быстрый родной модуль в своем приложении IOS для создания анимированного GIF-файла из URL ресурсов. Он работает хорошо с первой попытки, но когда я покидаю компонент и пропускаю новые ресурсы после того, как он был использован один раз, приложение вылетает, иногда отображая эту ошибку:

ошибка реагирования:

отреагировать на ошибку

или иногда xcode перенаправляет меня к этой функции target-c, говоря, что _instance для возврата не имеет значения:

ошибка цель-c

Вот как я называю свой родной модуль в моем компоненте реакции:

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

        }

Они являются важной частью моего кода, но я могу показать вам больше, если вам нужно

1 ответ

Я думаю, вам нужно сбрасывать ваш обратный вызов каждый раз, когда он используется со стороны swift... Так что в копе вашего метода обратного вызова js, повторно зарегистрируйте свой js cb, чтобы swift..

Другие вопросы по тегам