setInitialText无法与IOS 8.3一起使用(facebook,social,SLComposeViewController)

时间:2015-06-01 09:54:06

标签: objective-c facebook ios8 social

截至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];
}

2 个答案:

答案 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发布作曲家预填充。

我希望它有用。