KSFileUtilities 包含一系列用于处理 URL、路径以及其他文件管理方面的有用方法。以下是一些按目的分组的选择
将 URL 的查询字符串分割成一个类似字典的参数序列是很常见的情况。例如:
http://en.wikipedia.org/w/index.php?title=Main_page&action=raw
KSURLQueryUtilities
为将此转换为更 Cocoa 友好的形式提供了一个简单解决方案
- (NSDictionary *)ks_queryParameters;
还有从字典创建/推导新 URL 的 API
- (NSURL *)ks_URLWithQueryParameters:(NSDictionary *)parameters;
+ (NSURL *)ks_URLWithScheme:(NSString *)scheme
host:(NSString *)host
path:(NSString *)path
queryParameters:(NSDictionary *)parameters;
为各种 URL 显示和输入任务而设计的 NSFormatter
子类。
example
和 example.com
,生成了完整的 http://example.com/
URLhttp://example.com
显示/解释为 http://example.com/
+URLFromString:
方法会处理未转义字符KSURLFormatter
如果有一个合适的后端,可以编码国际化域名。对于 Mac OS X 项目,您可以包括 KSEncodeURLString.*
并链接到 WebKit.framework
以免费获得此功能。对于其他项目,通过以下之一提供自己的实现
+[KSURLFormatter setEncodeStringValueTransformer:]
+encodeStringValueTransformer
之前调用 +[NSValueTransformer setValueTransformer:forName:]
KSEncodeURLString
解码是通过 IFUnicodeURL 来执行的。请确保您适当处理其许可——有关详细信息,请参阅此文件的许可部分。
为 iOS 7 之前的 Cocoa 版本克隆自 NSURLComponents
。
KSURLNormalization 分类实现了 Wikipedia 中记录的规范化。
NSURL
完全可以解析相对字符串相对于另一个 URL,但遗憾的是没有 API 可以前往相反的方向。KSURLUtilities 来拯救!
- (NSString *)ks_stringRelativeToURL:(NSURL *)URL;
- (NSURL *)ks_URLRelativeToURL:(NSURL *)URL;
这个工作原理如何?嗯,每个人都有爱例子对吧?
接收者 | relativeToURL | 返回值 |
---|---|---|
http://karelia.com/foo/bar/ | http://karelia.com/ | foo/bar/ |
http://karelia.com/foo/example.png | http://karelia.com/ | foo/example.png |
http://karelia.com/foo/bar/ | http://example.com/ | http://karelia.com/foo/bar/ |
http://karelia.com/ | http://karelia.com/foo/bar/ | ../../ |
http://karelia.com/baz/index.xml | http://karelia.com/foo/bar/ | ../../baz/index.xml |
KSPathUtilities 对路径字符串的操作有一个等效的函数:-ks_pathRelativeToDirectory:
用于测试一个URL/路径是否包含另一个
- [NSURL ks_isSubpathOfURL:]
- [NSString ks_isSubpathOfPath:]
这里没有什么特别的,只是对内置的 -[NSURL host]
方法做了一些补充。
- (NSURL *)ks_hostURL;
将URL简化为其方案和主机的组合。例如,http://karelia.com/foo/bar/
变为 http://karelia.com/
- (NSArray *)ks_domains;
将主机拆分为其域。例如,http://www.karelia.com
得到 (www, karelia, com)
从Mac OS X 10.6开始,我们获得了一组新的URL方法,如 -URLByDeletingLastPathComponent
。如果您之前想要访问这种行为,就需要手动对 NSString
路径方法进行繁琐的操作,或者使用 CFURL
函数。KSURLUtilities 为10.5及更早版本提供了所有这些任务的简单Cocoa API。
- (NSString *)ks_lastPathComponent;
- (NSString *)ks_pathExtension;
- (NSURL *)ks_URLByAppendingPathExtension:(NSString *)pathExtension;
- (NSURL *)ks_URLByDeletingLastPathComponent;
- (NSURL *)ks_URLByDeletingPathExtension;
- (BOOL)ks_hasDirectoryPath;
- (NSURL *)ks_URLByAppendingPathComponent:(NSString *)pathComponent isDirectory:(BOOL)isDirectory;
有时需要尝试找到适合特定任务的最佳文件名/路径。例如,选择一个不会与现有文件冲突的文件名。为此,提供了 -[NSString ks_stringByIncrementingPath:]
方法。给定路径 example.png
,它将按以下方式循环:
example.png
example-2.png
example-3.png
example-4.png
…
有关该方法的实现和使用更多信息,请参阅 Mike的博客
简化了在基于文档的应用程序中处理拖放文件承诺。从 NSDraggingInfo
创建 KSFilePromise 实例,并负责管理收到的文件。
一个简单的表示URL(可选地附加标题)的类。功能
NSCoding
NSCopying
您还可以引入依赖于 WebKit.framework
的 KSWebLocationPasteboardAdditions,以便(不出所料)支持从/到剪贴板的Web位置读取和写入。
版权所有 © 2005-2013 Karelia Software
在此,免费准许任何取得此软件及相关文档副本(以下称为“软件”)的人,在不限任何权利的情况下处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并准许收得软件的人执行上述行为,前提是在以下条件下:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“现状”提供,不提供任何形式的保证,无论是明示的、推定的还是其他的,包括但不限于适销性、适用于特定目的和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,不论是因合同、侵权或其他行为产生的,还是与软件或软件的使用或其他行为有关。
如果使用 KSURLFormatter,它依赖于 IFUnicodeURL,其许可如下
版权 2010 Iconfactory, Inc. 保留所有权利。
红下列条件满足的情况下,允许重新分发给源代码和二进制形式,修改后或不修改后均可使用。
源代码分发给重新分发时必须保留上述版权声明、本条件列表以及以下免责声明。
二进制形式分发给重新分发时必须在文档或与分发一起提供的其他材料中再现上述版权声明、本条件列表以及以下免责声明。
该软件由Iconfactory,Inc.提供,“现状”且不提供任何明示或暗示的保证,包括但不限于适销性和适用于特定目的的隐含保证。在任何情况下,Iconfactory,Inc.或贡献者不因任何直接、间接、偶然、特殊、示范性或连锁损害赔偿责任(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)而承担责任,无论这些损害责任是出于何种原因以及基于何种责任理论,无论是合同、严格责任还是侵权(包括疏忽或其他)。即使被告知该软件使用可能会有此类损害,仍应承担此类损害责任。
软件和文档中包含的观点和结论是作者的观点,不应视为代表Iconfactory,Inc.的官方政策,无论是明示还是暗示。
IFUnicodeURL又依赖于VeriSign的IDN SDK
/**********************************************************************/ / / / VeriSign XCode(编码/解码)IDN库 / / / / 区域名字符串的编码/解码库。 / / / / (c)VeriSign Inc.,2003,保留所有权利 / / */ /***********************************************************************/
/**********************************************************************/ / / / 版权(c)2003,VeriSign 公司。 / / 所有权利保留。 / / / / 若要允许在源代码和二进制形式下重新分发和使用(无论是否修改),必须满足以下条件: / / / / 1)源代码重新分发必须保留上述版权声明、本条件列表以及下列免责声明。 / / / / 2)二进制形式重新分发必须在本分发所提供的文档和其他材料中复制上述版权声明、本条件列表以及下列免责声明。 / / / / 3)未经具体预先书面许可,不得使用 VeriSign 公司或其贡献者的姓名来认可或推广由此软件派生出的产品。 / / / / 本软件由版权所有者和贡献者按“现状”提供,并不承担任何明示或暗示的保证,包括但不限于适销性和适用于特定目的的保证。在任何情况下,版权所有者或贡献者均不对因使用本软件而产生的任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代货物或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,即使已被告知此类损害的可能。 / / / / 本软件受 BSD 开源许可证许可。更多信息请访问 www.opensource.org。 / / */ /***********************************************************************/
/**********************************************************************/ / / / 作者: / / / / John Colosi(VeriSign) / / Lihui Zhang(VeriSign) / / Srikanth Veeramachaneni(VeriSign) / / Jim Mathies(VeriSign) / / */ /***********************************************************************/