El hilo Kivy (Python) no puede descargar un archivo llamando a un método OBJETIVO C en iOS
-
21-12-2019 - |
Pregunta
Estoy desarrollando una aplicación multiplataforma usando Kivy Framework. Mi aplicación está escrita completamente en Python. Kivy hace toda la resolución de dependencia para mi aplicación para ejecutarse en iOS o Android.
Ahora, mi requisito es descargar un archivo usando NSURLCONNEPTECTORE. Si no necesito descargar un archivo usando NSurlConnection, estoy usando el módulo URLLIB2 de Python para descargar el archivo. Pero para descargarlo usando NSurlConnection, tengo que escribir un código C Nativo C.
Mi aplicación puede hacer varias descargas. Logre un archivo de un enlace que tiene todos los enlaces de descarga. Lee cada enlace para descargar y engendra un hilo. Entonces ese hilo se encarga de la descarga.
Para descargar un archivo usando NSURLCONNEPTECTORIO, necesito escribir un código C Nativo del Objetivo C que se puede llamar desde Python. Y para llamar a un método de una Clase del Objetivo C Tengo un Módulo de Python Handy llamado PyoBJUS .
Aquí está la pieza del código que llama un método OBJETIVO C para descargar -
from pyobjus.dylib_manager import load_dylib, make_dylib
from pyobjus import autoclass
urllib2Wrapper = autoclass('urllib2Wrapper')
ulib2 = urllib2Wrapper.alloc().init()
NSString = autoclass('NSString')
# shortcut to mimic the @"hello" in objective C
ns = lambda x: NSString.alloc().initWithUTF8String_(x)
ulib2.openWithUrl_withMethod_withFile_(ns(self.params["--url"]), ns("GET"), ns(""))
ulib2.download()
Soy un principiante en el objetivo C. ¿Alguien tiene alguna idea de por qué está sucediendo esto?
Solución 2
He resuelto el problema.La razón por la que estaba fallando porque NSurlConnection requiere un poco de trabajo extra si se llama desde hilos de fondo.
Por favor, siga este enlace - >>http://www.russellj.co.uk/Blog/2011/07/09/NSURLCONNEY-In-a-Background-Thread/
Entonces, he modificado mi código de MI OBJETIVO C para resolver el problema.
Otros consejos
¿Ha intentado usar el Kivy UrlRequest?
¡Esto le permite descargar algo asíncrono y todo en Python?-))