2012-11-29 35 views
5

Tôi có hành vi lạ này khi một trong các phương pháp danh mục của tôi bị ghi đè khi chạy trên iPhone 3G với iOs 5.1.Truy vấn phương thức ẩn của NSURLParameters có thể ghi đè lên danh mục

Tôi có thể loại này:

@interface NSURL (queryParameters) 
    - (NSDictionary *) queryParameters; 
@end 

trả về một cuốn từ điển với các phím NSString và giá trị NSArray (nhiều tham số với cùng một tên trong url của tôi).

Nó hoạt động tốt ngoại trừ trên thiết bị được đề cập ở trên, nơi tôi nhận được một NSDictionary với NSString làm giá trị thay vì NSArray tôi mong đợi (tương ứng với tham số cuối cùng trong url của tôi).

Tôi tạo ra một dự án có sản phẩm nào mà tôi xây dựng một NSURL giả và tìm ra rằng nó đáp ứng Selector "queryParameters", và trả về một NSDictionary với NSString như các giá trị:

NSString *urlString = @"http://dummy.url?foo=bar1&foo=bar2"; 
NSURL *url = [NSURL URLWithString:urlString]; 

NSLog(@"%@", [url respondsToSelector:@selector(queryParameters)][email protected]"YES":@"NO"); 
    // YES 

NSLog(@"%@", [[url performSelector:@selector(queryParameters)] debugDescription]); 
    // { 
    //  foo = bar2; 
    // } 

Vì vậy, tôi có 2 câu hỏi:

  • Có ai biết phương pháp này thuộc về api riêng tư của Apple hay bất kỳ thứ gì khác không?

EDIT: Theo trang này iOS6-Private-Frameworks, điều này "queryParameters" là một phương pháp không có giấy tờ của NSURL (nhưng điều đó không giải thích tại sao trong một số trường hợp nó bị ghi đè).

  • Tại sao phương thức "riêng" của tôi bị ghi đè bằng phương thức "riêng tư" này?

Lưu ý: Tôi đã đổi tên phương thức của riêng mình để tránh xung đột này.

+1

Bạn có thể sử dụng [danh mục có điều kiện] (http://stackoverflow.com/questions/11950173/conditional-categories-in-mountain-lion) nếu bạn muốn. –

Trả lời

1

Tôi nghĩ rằng quy ước ở đây cũng là tiền tố cho các phương pháp thể loại của bạn trên các lớp học mà không kiểm soát được để tránh xung đột tên!

Các vấn đề liên quan