リクエストを送信し、デリゲートレスポンダーを持つメソッドがあります。メソッドは KVO レスポンダーによって呼び出されています。viewDidLoad から呼び出すとコードは正常に動作しますが、KVO メソッドから要求を行うと、デリゲート メソッドがトリガーされません。
ここに私のKVOレスポンダがあります:
//observe app delegates userdata to check for when user data is available or data is changed
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if ([keyPath isEqualToString:@"userData"] )
{
//goto facebook logic
[self FBFriendSuggester];
}
}
そしてそれが呼び出すメソッド:
-(void)FBFriendSuggester
{
NSDictionary * fb_credentials = nil;
if([prefs objectForKey:@"facebookCredentials"])
{
fb_credentials = [prefs objectForKey:@"facebookCredentials"];
if ([fb_credentials objectForKey:@"expiry"] && [fb_credentials objectForKey:@"fbtoken"]) {
NSLog(@"found stored Facebook credentials.");
ApplicationDelegate.facebook.accessToken = [fb_credentials objectForKey:@"fbtoken"];
ApplicationDelegate.facebook.expirationDate = [fb_credentials objectForKey:@"expiry"];
}
}
if ([ApplicationDelegate.facebook isSessionValid]) {
printf("_valid facebook\n");
[ApplicationDelegate.facebook requestWithGraphPath:@"me/friends" andDelegate:self];
}else
printf("_invalid facebook\n");
}
およびデリゲート メソッド:
- (void)request:(FBRequest *)request didLoad:(id)result{
NSLog(@"result2:%@",result);
NSDictionary * rawObject = result;
NSArray * dataArray = [rawObject objectForKey:@"data"];
for (NSDictionary * f in dataArray) {
[friends addObject:[[KNSelectorItem alloc] initWithDisplayValue:[f objectForKey:@"name"]
selectValue:[f objectForKey:@"id"]
imageUrl:[NSString stringWithFormat:@"http://graph.facebook.com/%@/picture?type=square", [f objectForKey:@"id"]]]];
}
[friends sortUsingSelector:@selector(compareByDisplayValue:)];
[self pickerPopup:self];
}
このシナリオではデリゲート メソッドは呼び出されませんが、コントローラーから直接 -(void)FBFriendSuggester を呼び出すと正常に機能します。どうすればいいのかわからないので、デリゲートをトリガーすることを期待して応答するように通知を設定しようとしましたが、それもうまくいきませんでした。