我在文档中找不到这个。
我正在编写一些单元测试,其中一个应该失败的测试是[NSURL URLWithString: @"cow"]
。因为cow
不是有效的网址。
然而,NSURL
很好地解析了它,没有任何错误。它不会返回nil
并且不会抛出异常。在其上调用[url absoluteString]
会将其转回@"cow"
。
这里发生了什么? NSURL
真的应该允许吗?
答案 0 :(得分:3)
NSURL允许相对URL,其中包括“cow”。
RFC 2396中给出的URI的一般形式允许相对引用:
URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ]
rel_path = rel_segment [ abs_path ]
rel_segment = 1*( unreserved | escaped |
";" | "@" | "&" | "=" | "+" | "$" | "," )
除非我误读,否则这意味着任何有效字符序列都可以形成有效的相对URL。
答案 1 :(得分:0)
来自+ URLWithString的文档:
要初始化的字符串 NSURL对象。必须符合RFC 该方法根据RFC 1738和1808解析URLString。 ... 如果字符串格式错误,则返回nil。
不熟悉RFC 2396,我不能肯定地说,但我认为你必须拥有最少的协议和主机(即使域本身转发给主机)。我当然希望没有。
如果你没有通过传递@“cow”获得“nil”,你应该在bugreporter.apple.com上提交一个错误。你可能想要标题,“不要有牛。”