截至4月24日,最新的Facebook iPhone应用更新,SLComposeViewController的功能不再像预期的那样有效。指定的任何初始文本都会被忽略,尽管setInitialText方法返回true,就好像它成功了一样。然后,无论您点击“完成”还是“取消”,对话框都会返回“完成”。我知道这是一个Apple电话,我甚至没有使用Facebook SDK,但我已经确认一切都与之前安装的Facebook App版本完美配合,但当你在iPhone上升级Facebook应用程序时,此功能不再按预期工作。
请注意,完成处理程序的结果现在总是返回“完成” - 即使您点击“取消”也是,setInitialText:
现在什么都不做。已验证相同的代码在4月24日发布之前有效。
if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[controller setInitialText:@"hiiiiiii"];
[controller setCompletionHandler:^(SLComposeViewControllerResult result)
{
if (result == SLComposeViewControllerResultCancelled)
{
NSLog(@"The user cancelled.");
}
else if (result == SLComposeViewControllerResultDone)
{
NSLog(@"The user posted to Facebook");
}
}];
[self presentViewController:controller animated:YES completion:nil];
}
else
{
SCLAlertView *alert = [[SCLAlertView alloc] init];
[alert showWarning:self title:@"alert" subTitle:@"facebook not installed" closeButtonTitle:@"ok" duration:0.0f];
}
答案 0 :(得分:0)
在这篇文章发表时,即使使用FB SDK,FB仍然不允许设置初始文本。
我实施的绕过问题的方法是将内容复制到剪贴板并显示一个对话框,通知用户他们可以粘贴预设内容。
答案 1 :(得分:-2)
#include <map>
#include <string>
// definition of pet hierarcy
class pet_t
{
public:
virtual ~pet_t(void) {}
};
class frog_t : public pet_t
{
public:
frog_t(int) {}
static frog_t *builder(int n) { return new frog_t(n); }
};
class dog_t : public pet_t
{
public:
dog_t(const char *, int) {}
static dog_t *builder(const char *n, int p) { return new dog_t(n, p); }
};
// the per builder function type
typedef pet_t *(*pet_builder_t)(...);
// the map containing per builders: it's indexed by per type name
std::map<std::string, pet_builder_t> registry;
void build_factory(void)
{
registry["frog"] = reinterpret_cast<pet_builder_t>(&frog_t::builder);
registry["dog"] = reinterpret_cast<pet_builder_t>(&dog_t::builder);
}
// the actual factory function
template <class ...Ts>
pet_t *factory(std::string name, Ts&&...ts)
{
pet_builder_t builder = registry[name];
// assume there is something in the map
return builder(std::forward<Ts>(ts)...);
}
int main(int argc, char *argv[])
{
build_factory();
dog_t *dog = dynamic_cast<dog_t *>(factory(std::string("dog"), std::string("pluto"), 3));
frog_t *frog = dynamic_cast<frog_t *>(factory(std::string("frog"), 7));
}
不再有效,因为Facebook最近更改了有关预填充的政策,但 setInitialText:
仍在运作,可能有用。
addURL:
通过这种方式,我可以使用我的应用程序的URL为Facebook发布作曲家预填充。
我希望它有用。