0

我正在尝试按照 Dropbox 开发人员网站上的说明进行操作,但我不知道如何正确添加 DBRESTClient 对象。现在在@end 之后的.h 文件中,我有:

DBRestClient *restClient;

在我的 .m 文件中,我有:

- (DBRestClient *)restClient {
    if (!restClient) {
        restClient =
        [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];
        restClient.delegate = self;
    }
    return restClient;
}

我认为这就是 Dropbox 页面告诉我的;但是,这会导致我的应用程序崩溃(我认为是因为它会在不应该的时候尝试释放 restClient)。我也尝试将 restClient 列为非原子属性,但上传等方法似乎不起作用。(上传方法现在正在运行,应用程序在完成上传后就会崩溃......)帮助?

4

1 回答 1

0

Rupesh,基于蜜蜂在 4 月 20 日的评论的详细规范答案是self被解除分配。

这意味着必须有代码按顺序执行以下操作。

  1. restClient通过调用返回类型对象的函数创建的变量(DBRestClient*)
  2. 该变量将其组件(@property?可能)delegate设置self为该函数(见上面的问题)
  3. 后来,self指向的对象被释放,这意味着委托没有指向任何东西。
  4. 再后来,一定有代码出于某种目的试图取消引用委托。

请记住,如果正在发送的消息是一个函数,那么向 nil objc 对象发送消息只会有效地导致没有任何事情发生或零赋值。因此,崩溃一定是由于某种其他类型的取消引用。

于 2012-12-12T01:26:12.547 回答