【发布时间】:2012-11-17 10:29:30
【问题描述】:
我有这种奇怪的行为,当我在带有 iOs 5.1 的 iPhone 3G 上运行时,我的一个类别方法被覆盖了。
我有这个类别:
@interface NSURL (queryParameters)
- (NSDictionary *) queryParameters;
@end
返回带有 NSString 键和 NSArray 值的字典(在我的 url 中具有相同名称的多个参数)。
它工作正常,除了在上面提到的设备上,我得到一个以 NSString 作为值的 NSDictionary,而不是我期望的 NSArray(对应于我的 url 中的最后一个参数)。
我创建了一个空项目,在其中构建了一个虚拟 NSURL,并发现它响应选择器“queryParameters”,并返回一个以 NSString 作为值的 NSDictionary:
NSString *urlString = @"http://dummy.url?foo=bar1&foo=bar2";
NSURL *url = [NSURL URLWithString:urlString];
NSLog(@"%@", [url respondsToSelector:@selector(queryParameters)]?@"YES":@"NO");
// YES
NSLog(@"%@", [[url performSelector:@selector(queryParameters)] debugDescription]);
// {
// foo = bar2;
// }
所以我有两个问题:
- 有人知道这个方法是否属于 Apple 私有 api(或其他任何东西)吗?
编辑:根据这个页面iOS6-Private-Frameworks,这个“queryParameters”是一个未记录的 NSURL 方法(但这并不能解释为什么在某些情况下它被覆盖)。
- 为什么我的“自己的”方法会被这个“私有”方法覆盖?
备注:我最终重命名了自己的方法以避免这种冲突。
【问题讨论】:
-
如果您愿意,可以使用conditional categories。
标签: objective-c ios categories nsurl