Re: NSURL from non-url NSString
Re: NSURL from non-url NSString
- Subject: Re: NSURL from non-url NSString
- From: Ken Thomases <email@hidden>
- Date: Sun, 25 May 2014 10:26:06 -0500
On May 25, 2014, at 10:05 AM, Koen van der Drift wrote:
> At one point in my code I need to recognize an URL to show in a different color. Pretty standard:
>
> NSURL *url = [NSURL URLWithString: aString];
>
> if (url) // if url is created change color
> Works great, if aString starts with eg http:// it will be in blue; regular strings won't.
>
>
> However, I noticed that strings that have the form P12345 also turn blue. Any idea why that string would turn into an NSURL? The url scheme is nil, and the path components just show P12345.
>
> (I could test above for if (url.scheme) to avoid this, but knowing why this happens would actually help me with other parts in my app).
The docs for +URLWithString: say that the string "[m]ust be a URL that conforms to RFC 2396. This method parsesURLString according to RFCs 1738 and 1808." RFC 1808 is about the syntax for relative URLs. I suspect that "P12345" meets the (fairly loose) criteria for a relative URL string. I suspect that many strings will.
You are abusing the API. If you call +URLWithString:, Cocoa assumes that the string is a URL and will do its best to interpret it as such. It will fail only if the string _can't_ be interpreted as a URL. This is not a method for determining if a string is a typical URL suitable for any particular purpose (like opening in a browser).
You might want to see if NSDataDetector with NSTextCheckingTypeLink would work better for your purposes.
Regards,
Ken
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden