发送不成功后,Twitter 返回错误结果。

8
当在IOS5中使用TWTweetComposeViewController来撰写和发送推文时,如果推文是重复的,则会显示一个错误警报,说明推文是重复的,无法发送,但TWTweetComposeViewControllerCompletionHandler仍然会得到一个TWTweetComposeViewControllerResultDone的结果值,而不是TWTweetComposeViewControllerResultCancelled
(这种情况可能也会发生在其他情况下,不仅仅是对于重复的推文-我没有检查过。)
这使得在成功发送后向用户显示确认消息变得不可能,因为处理程序会得到相同的“完成”结果,无论发送是否成功。
是否有另一种方法来检查发送是否真正成功?

也许你应该向苹果提交一个错误报告... - Peter Warbo
4个回答

3

TWTweetComposeViewController的completionHandler文档中说明:

该处理程序有一个单一参数,指示用户是否完成或取消了推文的撰写。

无论实际发布推文的结果如何,completionhandler都会告诉您用户是否实际完成或取消了推文的撰写。

更新

我进一步研究了一下,发现TWTweetComposeViewController是那些方便类之一,为开发人员带来了大量工作,以换取不让开发人员自己处理任何事情。在这种情况下,开发人员无法处理发送推文时发生的错误,并且必须依赖于iOS提供的警报对话框来通知用户。

您可以使用Saleh的方法绕过此问题,但我认为在实际应用中不够安全。请参见他答案中的评论。

另一种方法是实现自己的视图控制器来处理推文的撰写和发送。您可以按照以下 stackoverflow answer 中的步骤进行操作。


感谢您提供完整的答案,即使它是“不,你真的不能这样做。”我也认为将人们重定向到处理更复杂推文的不同解决方案是有帮助的。 - Stephen Furlani
没问题,谢谢你的奖励。但是,说“你可以这样做”比“不,你不能这样做”更有趣。希望这能对其他人也有所帮助。 - SpacyRicochet

1

检查警报消息,如果显示警报消息,则可以知道发生了错误。我认为警报消息会添加到窗口中。您可以检查窗口子视图的计数,如果在调用委托函数时它们增加了,则会知道发生了错误。


1
这个方法可能可行,但并不是非常安全的。你永远无法确定iOS在任何时刻是否自己增加了窗口子视图的数量。 - SpacyRicochet
是的,但是您可以在发送推文之前检查子视图,并在调用TWTweetComposeViewControllerResultDone时再次检查。苹果只在应用程序启动时添加子视图。 - Saleh
你永远不确定这一点,这就是问题所在。苹果突然可能会对电池寿命或者你的互联网连接失败发表意见。也许通知计数也算作子视图。更糟糕的是,如果在新的iOS版本中,他们决定警报对话框不再是当前窗口的子视图,而是一个新窗口的子视图,那会发生什么呢? - SpacyRicochet
是的,我知道这并不是万无一失的,但它可以作为解决方法,因为我们没有任何确定性的方法来处理这个问题。 - Saleh

-1
    [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) 
                         {

                         if([urlResponse statusCode]==200)
                             {
//Tweet tweeted successfully....
    }
    }

这可能会对你有所帮助。 如果URL响应代码为200,则可以说文本已被推文....


-1

这只是一个视图控制器吧?视图控制器的结果很好,因为它说明了视图控制器的状态(已经完成运行)。

你用什么发送推文?那个库很可能有一些实现的东西,可以用来确定你的推文是否成功发送。


“Isn't it only a view controller”是什么意思?我正在使用这个视图控制器发送我的推文。你熟悉它吗? - Amiram Stark
发送推文的结果不是“完成”... 推文没有被发送。 - Tycho Pandelaar
我同意Amiram的观点 - 即使出现此错误,也会完成...不知道如何解决。 - TommyG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接