2012-04-20 77 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對象只會有效地導致沒有任何事情發生,或者如果正在發送的消息是一個函數,則不會產生零賦值。因此碰撞一定是由於某種其他類型的解除引起的。

相關問題