KIVY(Python)线程无法通过在iOS中调用Objective C方法下载文件



我正在使用KIVY框架开发一个跨平台应用程序。我的应用程序完全是用python编写的。KIVY为我的应用程序在iOS或Android中运行做所有的依赖解析。

现在我的需求是使用NSURLConnection下载一个文件。如果我不需要使用NSURLConnection下载文件,那么我将使用python的urllib2模块来下载文件。但是要使用NSURLConnection下载它,我必须编写一些本机Objective C代码。

我的应用程序可以进行多次下载。它从包含所有下载链接的链接中获取一个文件。它读取每个链接以供下载,并生成一个线程。然后该线程负责下载。

要使用NSURLConnection下载文件,我需要编写可以从Python调用的本机Objective C代码。为了调用Objective C类的方法,我有一个名为pyobjus的方便的python模块。

我写了一个Objective C类,可以下载一个文件。但我遇到了一个有趣的问题。

当我按下应用程序的按钮调用Objective C方法时,它会下载并调用所有代理。

但当我试图通过从python中生成一个线程并从该线程调用Objective C方法来下载同样的东西时,下载是不起作用的。

这是一段调用Objective C下载方法的代码-

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()

我是目标C的初学者。有人知道为什么会发生这种情况吗?

感谢

您尝试过使用Kivy UrlRequest吗?

http://kivy.org/docs/api-kivy.network.urlrequest.html?highlight=urlrequest#kivy.network.urlrequest

这允许您异步下载任何内容,并且全部使用Python?;-)

我已经解决了这个问题。它失败的原因是,如果从后台线程调用NSURLConnection,则只需要少量额外的工作。

请关注此链接-http://www.russellj.co.uk/blog/2011/07/09/nsurlconnection-in-a-background-thread/

因此,我修改了目标C代码来解决这个问题。

最新更新