【问题标题】:Use NSScanner or NSRange for url to find NSSet objects使用 NSScanner 或 NSRange 作为 url 来查找 NSSet 对象
【发布时间】:2014-11-29 14:55:47
【问题描述】:

基本上,我正在尝试为我的 webview 查找 url 中包含的 NSSet 对象。

我将如何使用 NSScanner 或 NSRange 来执行此操作?

以下是我正在使用的内容。

    //External file links
    NSURL* externalURL = [request URL];
    NSString *externalFileExtension = [[request URL] pathExtension];


    //External file extensions
    NSLog(@"fileExtension is: %@", externalFileExtension);
    NSSet *supportedFileExtensions = [NSSet setWithObjects:@"mpeg", @"mpg", @"m1s", @"mpa", @"mp2", @"m2a", @"mp2v", @"mv2", @"m2s", @"avi", @"mov", @"qt", @"asf", @"asx", @"wmv", @"wma", @"wmx", @"rm", @"ra", @"ram", @"rmvb", @"mp4", @"3gp", @"3gpp", @"ogm", @"mkv", @"flv", @"mv4", @"srt", @"swf", @"vob", @"aif", @"iff", @"m3u", @"m4a", @"mid", @"mp3", @"mpa", @"wav", @"aac", @"7z", @"cbr", @"deb", @"gz", @"pkg", @"rar", @"rpm", @"sitx", @"tar.gz", @"zip", @"zipx", @"ipsw", @"bin", @"cue", @"dmg", @"iso", @"mdf", @"toast", @"vcd", @"torrent", @"nes", @"rom", @"doc", @"docs", @"msg", @"odt", @"rtf", @"txt", @"wpd", @"wps", nil];

    if ([supportedFileExtensions containsObject:externalFileExtension]) {
         //my actions
}

由于链接的类型,有些网站不完全使用文件扩展名,有些使用链接中的扩展名类型,即“zip=blahblah”或“blahblahzipblah”

我需要搜索单击的链接以找到supportedFileExtensions 部分。

先谢谢你了。

更新: 感谢 rmaddy 让我朝着正确的方向前进。对于我最初的问题,它确实解决了它。但我在其他一些网站上使用时遇到问题。

我有一个 web 视图,其中有几个指向不同站点的链接,例如 Media Fire、Copy、Box 等。甚至是直接下载链接。例如,媒体触发链接甚至无需访问该站点即可开始下载,就像它只是下载文本一样。直接下载根本不会触发我的下载器。

使用公认的答案,区分这些的最干净的方法是什么?

【问题讨论】:

  • 您的目标是查看您的任何扩展是否在 URL 的任何部分中?
  • 正是我想要做的。

标签: ios string webview nsset nsscanner


【解决方案1】:

以下应该是你想要的:

//External file links
NSURL* externalURL = [request URL];
NSString *urlString = [externalURL absoluteString];

NSSet *supportedFileExtensions = [NSSet setWithObjects:@"mpeg", @"mpg", @"m1s", @"mpa", @"mp2", @"m2a", @"mp2v", @"mv2", @"m2s", @"avi", @"mov", @"qt", @"asf", @"asx", @"wmv", @"wma", @"wmx", @"rm", @"ra", @"ram", @"rmvb", @"mp4", @"3gp", @"3gpp", @"ogm", @"mkv", @"flv", @"mv4", @"srt", @"swf", @"vob", @"aif", @"iff", @"m3u", @"m4a", @"mid", @"mp3", @"mpa", @"wav", @"aac", @"7z", @"cbr", @"deb", @"gz", @"pkg", @"rar", @"rpm", @"sitx", @"tar.gz", @"zip", @"zipx", @"ipsw", @"bin", @"cue", @"dmg", @"iso", @"mdf", @"toast", @"vcd", @"torrent", @"nes", @"rom", @"doc", @"docs", @"msg", @"odt", @"rtf", @"txt", @"wpd", @"wps", nil];

for (NSString *extension in supportedFileExtensions) {
    if ([urlString rangeOfString:extension].location != NSNotFound) {
        // Found extension somewhere in the URL - process it as needed
        break; // stop looking for more
    }
}

【讨论】:

  • 大部分时间都在工作,只有几个问题。我有几个指向不同站点的链接,例如 Media Fire、Copy、Box 等。甚至是直接下载链接。例如,媒体触发链接甚至无需访问该站点即可开始下载,就像它只是下载文本一样。直接下载根本不会触发我的下载器。
  • 这似乎与您的原始问题无关。如果此答案解决了您最初的问题,您应该接受和/或更新答案。如果您还有其他问题,请发布包含相关详细信息的新问题。
  • 不要更新这个已完成并已回答的问题,而是发布一个新问题。
【解决方案2】:

也许像这样没有使用 NSScanner 或 NSRange:

BOOL result = NO;
for (NSString *extension in supportedFileExtensions) {
    if ([externalFileExtension isEqualToString:extension]) {
        result = YES;
        break;
    }
}

【讨论】:

  • 但问题在于: NSString *externalFileExtension = [[request URL] pathExtension];仍在搜索扩展程序,此时“扩展程序”可能位于所点击链接的中间。
  • 这个答案中的代码是简单地调用 OP 已经在做的 [supportedFileExtensions containsObject:externalFileExtension] 的漫长道路。
  • 啊。我没有意识到 containsObject 会在每个项目上调用 isEqual 。我相信它只是比较指针?
  • 其实是比较hash方法返回的值?我现在要安静...
猜你喜欢
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
相关资源
最近更新 更多