我正在使用Kivy Framework开发跨平台应用程序。我的应用程序在Python中完全写入。 Kivy为我的应用程序进行了所有依赖性解析,以在iOS或Android中运行。

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

我的应用程序可以做多个下载。它从具有所有下载链接的链接获取文件。它读取下载的每个链接,它会产生一个线程。然后那个线程照顾下载。

使用nsurlconnection下载文件,我需要写入可以从python调用的本机目标c代码。并调用一个目标C类的方法,我有一个名为 pyobjus

我已经写了一个可以下载文件的目标C类。但我正在进行一个有趣的问题。

当我通过按下我的应用程序按钮来调用目标c方法时,下载和所有代表都被称为。

但是当我尝试通过从python的线程从python中推出同样的事情并从该线程调用目标c方法时,下载不起作用。

以下是调用目标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的初学者。任何人都知道为什么这发生了什么?

感谢

有帮助吗?

解决方案 2

我已经解决了这个问题。它失败的原因是因为nsurlconnection需要少量的额外工作如果从背景线程调用。

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

所以,我已经修改了我的目标C代码来解决问题。

其他提示

您是否尝试过使用Kivy UrlRequest?

http:// kivy。org / docs / api-kivy.network.urlrequest.html?突出显示= UrlRequest#Kivy.Network.urlRequest

这允许您异步下载任何内容,并且都在Python中下载?; - )

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top