Can you clarify what you mean by "it works only when I get to a status length of 140"? Also, when you reach that state, are you able to post the Tweet to us? I'm 99% sure that this behavior is expected, but I want to verify. Feel free to post code if it's easier to explain that way.
Here's what I think is happening:
The -[TWTweetComposeViewController addUrl:] method has a contract that says that the object will return a true Boolean if the passed value can be added successfully. There are many factors that go into adding an URL-- e.g. extra char for https, space between URL and other text, etc.-- so while it makes sense to assume 140 - 20 = 120 chars available, that's not the guaranteed behavior of the method.
On the other hand, if you create a status that includes URL(s) and correctly accounts for t.co wrapping, you should see that -[TWTweetComposeViewController setInitialText:] correctly accepts the status as expected.
I'll update our docs to clarify the behavior. Thanks for pointing this out.