この質問に出くわした人にとって、マットの観察は最新のfacebook-iphone-sdkには当てはまらないようです。パラメータはもはや明示的に関連する方法で保持されていない:
+ (FBRequest *)getRequestWithParams:(NSMutableDictionary *) params
httpMethod:(NSString *) httpMethod
delegate:(id<FBRequestDelegate>) delegate
requestURL:(NSString *) url {
FBRequest* request = [[[FBRequest alloc] init] autorelease];
request.delegate = delegate;
request.url = url;
request.httpMethod = httpMethod;
request.params = params;
request.connection = nil;
request.responseText = nil;
だから、デリゲートのためのメモリ管理は.hファイルにバックプロパティ宣言にフォール:
@property(nonatomic,assign) id<FBRequestDelegate> delegate;
これは、クラッシュが今であることを意味し可能なのは、FBRequestが完了する前にデリゲートオブジェクトを割り当て解除できるためです。
更新:可能な回避策は保留FBRequestsのキャンセルを許可するようにthis質問で提案されて
。
アップデート2:
デリゲートはFBRequestが終了する前に、あなたは基本的にマットを示唆するものである(デリゲートの割り当てを解除すると、アクティブFBRequestの接続を解除する必要が割り当て解除されます場合はクラッシュを避けるためにリンクされた質問で)。しかし、(これが新しいかどうかはわかりません)、NSURLConnectionプロパティが公開されているので、これをFBRequestに直接行うことができます。だから、あなたはプロパティであなたのFBRequestオブジェクトを保持場合:
@property (nonatomic, retain) FBRequest *myRequest;
を、あなたの電話をかける際にリクエストオブジェクトを保存します。
self.myRequest = [facebookObj requestWithGraphPath:@"me" andDelegate:self];
あなたのdeallocですべてをクリーンアップすることができます。
- (void)dealloc
{
if(myRequest) {
[[myRequest connection] cancel];
[[myRequest release];
}
...
[super dealloc];
}
を
明らかに、レスポンスを処理したら、デリゲートメソッドでFBRequestプロパティを解放してnilする必要があります。
ありがとう、あなたは私の一日を救った。 –