2011-12-16 6 views
5

Trước khi iOS5 tôi có thể kiểm tra để xem những gì URL tôi đã nhận được phản hồi từ mã của tôi trông như thế này:Cách kiểm tra URL mà NSURLConnection của bạn cung cấp cho bạn phản hồi từ đâu?

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    returnString = [[[NSMutableString alloc] initWithData:responseData encoding: NSUTF8StringEncoding] autorelease]; 
    NSString * currentParseString = [NSString stringWithFormat:@"%@",connection]; 
    NSLog(@"Currently Parsing: %@",currentParseString); 
} 

đăng nhập của tôi sẽ in ra "Currently Parsing: http://www.myinfo.com/parser...."

nào tôi có thể sau đó sử dụng để kiểm tra và gửi vào các câu lệnh IF khác nhau. Vấn đề của tôi bây giờ là, trong iOS5, connection không còn được in dưới dạng URL nữa, nó đang được in dưới dạng khối bộ nhớ <NSURLConnection: 0x6a6b6c0> Làm cách nào để in lại dưới dạng URL một lần nữa vì vậy tôi không phải viết lại câu lệnh IF của mình?

Trả lời

7

tôi đã làm một cái gì đó như thế này:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"%@",[connection currentRequest]); 
} 
+0

Chính xác những gì tôi đang tìm kiếm! Cảm ơn! – Louie

+1

Thú vị. Không thể tìm thấy 'currentRequest' trong tài liệu. hãy đảm bảo Apple đồng ý với nó. – XJones

+1

Ok, tìm thấy 'currentRequest' và' originalRequest' trong tập tin tiêu đề 'NSURLConnection'. Có vẻ như chúng chỉ là iOS 5. Vì vậy, đi cho nó nếu đó là ok cho ứng dụng của bạn. – XJones

5

Khi bạn đặt %@ trong định dạng NSString, nó sẽ được thay thế bằng [object description]. Apple phải thay đổi số tiền trả lại là [connection description]. Thật khó để dựa vào điều đó trong mọi trường hợp vì nó không được đảm bảo ở bất kỳ định dạng cụ thể nào.

Có một số cách bạn có thể thay đổi triển khai của mình. Có lẽ là nhanh nhất là để tạo ra một lớp con rất đơn giản của NSURLConnection dọc theo dòng:

// MyNSURLConnection.h 
// code written assuming ARC 
@interface MyNSURLConnection : NSURLConnection 
@property (nonatomic, strong) NSURL *requestURL; 
@end 


// MyNSURLConnection.m 
// example override, you can override all the init/connection methods 
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately { 
    self = [super initWithRequest:request delegate:delegate startImmediately:startImmediately; 
    if (self) { 
     self.requestURL = request.URL; 
    } 
    return self; 
} 


// in your MyNSURLConnectionDelegate controller 
- (void)connectionDidFinishLoading:(MyNSURLConnection *)connection { 
    returnString = [[[NSMutableString alloc] initWithData:responseData encoding: NSUTF8StringEncoding] autorelease]; 
    NSString * currentParseString = [NSString stringWithFormat:@"%@",connection.requestURL]; 
    NSLog(@"Currently Parsing: %@",currentParseString); 
    // rest of your code 
} 
+0

+1 cho một câu trả lời tuyệt vời XJones. Tôi đã đi với Maulik bởi vì anh ấy có nhiều hơn một chút so với những gì tôi đang tìm kiếm. Mặc dù tôi sẽ ghi nhớ câu trả lời này cho các dự án trong tương lai. Cảm ơn một lần nữa! – Louie

+1

không phải lo lắng. giải pháp đơn giản nhất đáp ứng yêu cầu của bạn là cách để đi. – XJones