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?おそらく)delegateselfその関数(上記の質問で見られる )に設定します
  3. 後で、ポイントしていたオブジェクトのself割り当てが解除されました。つまり、デリゲートは何もポイントしていませんでした。
  4. 後でまだ、何らかの目的でデリゲートを逆参照しようとしたコードがあったに違いありません。

nil objcオブジェクトにメッセージを送信すると、送信されるメッセージが関数である場合にのみ、効果的に何も起こらないか、割り当てがゼロになることを覚えておいてください。したがって、クラッシュは他の種類の間接参照が原因であったに違いありません。

于 2012-12-12T01:26:12.547 に答える