【发布时间】:2013-11-27 19:50:45
【问题描述】:
我有一个 UITextField,它允许用户为 Facebook 照片输入自定义相册名称。一旦 textFieldShouldReturn,我将 textField.text 发送到 Facebook。调用完成处理程序后,我想更新我的模型并在我的 tableView 中重新加载数据。
我的问题是我的完成处理程序的某些行从未被调用。我用调试器标记了所有行,一旦我逐行执行代码,其中一些行永远不会被调用,尤其是 tableView reload 方法。
我在线程方面做错了吗?为什么我的部分完成处理程序被取消并且从未调用过?
这是我的代码:
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
NSString *newAlbumName;
newAlbumName = textField.text;
NSMutableDictionary* parameters = [NSMutableDictionary dictionary];
[parameters setObject:newAlbumName forKey:@"name"];
[parameters setObject:newAlbumName forKey:@"message"];
FBRequest* request = [FBRequest requestWithGraphPath:@"me/albums" parameters:parameters HTTPMethod:@"POST"];
FBRequestConnection *connection = [[FBRequestConnection alloc] init];
[connection addRequest:request
completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if (!error) {
NSDictionary *newAlbum;
[newAlbum setValue:newAlbumName forKey:@"name"];
[self.albums addObject:newAlbum];
NSLog(@"created: %@", [newAlbum objectForKey:@"name"]);
[self.tableView reloadData];
}
else {
NSLog(@"Error: %@", error.userInfo);
}
}];
[connection start];
[textField resignFirstResponder];
[textField removeFromSuperview];
return YES;
}
【问题讨论】:
-
显然,如果不满足条件,
if语句主体中的代码行将不会被执行。 -
@jlehr 这不是问题。 if 语句已执行,但只执行了该语句的几行。最后,问题是我如何初始化 NSDictionary。正确的应该是: NSDictionary *newAlbum = [[NSDictionary alloc] initWithObjectsAndKeys:newAlbumName, @"name", nil];
标签: ios objective-c facebook uitextfield completionhandler