2

我正在使用一个名为 BlackRaccoon 的包将文件上传到 FTP 服务器。我真的在为一个我无法弄清楚的非常基本的委托概念而苦苦挣扎。

在我的上传类 .m 文件中,我有一个调用 BlackRaccoon 上传请求的方法。我使用以下代码:

uploadFile = [BRRequestUpload initWithDelegate: self];

uploadFile.path = @"/filehere.txt";
uploadFile.hostname = @"xxx";
uploadFile.username = @"xxx";
uploadFile.password = @"xxx";

//we start the request
[uploadFile start];

在我的 .h 文件中,我有以下内容:

@interface myClass : NSObject <BRRequestDelegate>
{
BRRequestCreateDirectory *createDir;
BRRequestDelete * deleteDir;
BRRequestListDirectory *listDir;

BRRequestUpload *uploadFile;

NSData *uploadData;

}

每次编译和运行时,我都会在 BlackRaccoon 文件的某处收到错误消息,例如:

__25-[BRStreamInfo openRead:]_block_invoke [第 190 行] 服务器没有响应。暂停。

在寻找这个错误时,我发现自己在创建读取流的方法中,特别是:

    request.didOpenStream = NO;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, timeout * NSEC_PER_SEC), dispatch_get_local_queue(), ^{
    if (!request.didOpenStream && request.error == nil)
    {
        InfoLog(@"No response from the server. Timeout.");
        request.error = [[BRRequestError alloc] init];
        request.error.errorCode = kBRFTPClientStreamTimedOut;
        [request.delegate requestFailed: request];
        [request.streamInfo close: request];
    }
});

我完全不及格。我们的服务器已启动并正在运行,并且我们的 Android 设备或应用程序(例如“FTP Sprite”)没有超时问题。

我很确定问题出在 initWithDelegate 的东西上。我只是不认为我委派正确,但我不知道为什么。有人有什么想法吗?我知道我在某个地方需要(id)init,但我只是不明白在哪里或如何。

谢谢!

4

2 回答 2

0

刚刚检查了BlackRaccoon Git 的 uploadFile 函数,我发现在他们的示例中,它们不是allocBRRequestUpload 对象,而是这样称呼它:

uploadFile = [BRRequestUpload initWithDelegate: self];

这可能是你崩溃的原因吗?

于 2013-07-11T08:19:15.267 回答
0

BRRequest.m请在文件中更改一行。

- (id)initWithDelegate:(id<BRRequestDelegate>)aDelegate功能。改变

self.passiveMode = YES;

self.passiveMode = NO;

它会工作....

这种改变对我有用。

于 2014-08-21T13:27:02.293 回答