在[NSURLConnection sendSynchronousRequest]中回调后无法访问NString

时间:2010-05-13 22:56:37

标签: c objective-c nsurlconnection

您好我正试图从一个网站获取一个我没有问题的cookie。当我尝试将cookie保存到持有者类或其他任何地方的NSString时,问题就出现了,并尝试在首次创建它的委托方法之外访问它。

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
 {
  int i;
  NSString* c;
     NSArray* all = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@"http://johncleary.net"]];
  //NSLog(@"RESPONSE HEADERS: \n%@", [response allHeaderFields]);
  for (i=0;i<[all count];i++)
   {
    NSHTTPCookie* cc = [all objectAtIndex: i];
    c = [NSString stringWithFormat: @"%@=%@", [cc name], [cc value]];
    [Cookie setCookie: c];
   NSLog([Cookie cookie]) // Prints the cookie fine.

  }



  [receivedData setLength:0];
 }

当我在方法中时,我可以看到并打印cookie,但是当我尝试从其他任何地方访问它时我都不能,即使它存储在持有者类中

@interface Cookie : NSObject
{
 NSString* cookie;
}
+ (NSString*) cookie;
+ (void) setCookie: (NSString*) cookieValue;
@end

int main (void)
{
 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
 JCLogin* login;
 login = [JCLogin new];

 [login DoLogin];
 NSLog([Cookie cookie]); // Crashes the program
 [pool drain];
 return 0;

}

1 个答案:

答案 0 :(得分:3)

您的setCookie:方法retain是否为Cookie?

NSString stringWithFormat:会返回一个自动释放的对象,因此,除非您将其保留在setCookie:方法中,否则它将会消失。