2012-04-20 51 views
0

我试图按照Dropbox开发人员的网站上的说明,但我无法弄清楚如何正确添加一个DBRestClient对象。眼下在@end后,我的.h文件中我有:iOS中的Dropbox API:如何使用DBRestClient?

DBRestClient *restClient; 

而在我的.m文件我有:

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

这是Dropbox的页面告诉我做什么,我想;然而,这导致我的应用程序崩溃(我认为是因为它试图释放restClient,当它不应该)。我也尝试列出restClient作为非原子属性,但然后上传等方法似乎并没有工作。 (上传方法现在正在工作,一旦它完成上传,应用程序就会崩溃...)帮助?

+0

您发布的代码没有任何问题。那么你使用ARC?你是不小心释放'restClient'返回的值。 'self'在'DBRestClient'之前被释放了吗? – Joe 2012-04-20 14:26:53

+0

哦,哎呀......这是'自我'获得释放。谢谢! – bee 2012-04-20 15:04:04

+3

请关闭该问题,以免我们看到它在等待回答。 – Dad 2012-12-08 22:48:02

回答

0

Rupesh的基础上,04月20蜜蜂的评论详细规范的答案是self渐渐释放。

这意味着必须有代码完成以下操作。

  1. 在函数调用restClient的函数,返回类型的对象(DBRestClient *)
  2. 变量设置它的成分(@property?可能)delegate创建self一个变量(在 问题可见上面)
  3. 后来,对象self被指出已被释放,这意味着代表没有指向任何东西。
  4. 后来仍然有一些代码出于某种目的试图取消引用委托。

确实记得发送消息到nil objc对象只会有效地导致没有任何事情发生,或者如果正在发送的消息是一个函数,则不会产生零赋值。因此碰撞一定是由于某种其他类型的解除引起的。