3

我在重新访问方法外的实例变量时遇到问题。我想访问其他方法中的值。但是当我在其他方法中打印该值时,会打印空值。所以伙计们,我需要你的帮助。如果你没有得到我的问题,请告诉我。谢谢

        //I am giving a snippet of my code
//DBForHomeViewController.h class
@interface DBForHomeViewController : UIViewController{
   id _jsonDB;
}
-(void)channelIDForDataBase;
-(void)openDataBase;

@end

//DBForHomeViewController.m class
@implementation DBForHomeViewController
-(void)channelIDForDataBase
{

   for (NSString *pNewString in stringValueOfCIdDB) {

      NSString *recentVideoUrl=[NSString stringWithFormat:@"%@%@",pNewString,fullPublishDate,];


        NSURL *videoUrlPublished=[NSURL URLWithString:recentVideoUrl];
        NSURLRequest *requestVideoUrlPublished=[NSURLRequest requestWithURL:videoUrlPublished];


        AFJSONRequestOperation *operationURL = [AFJSONRequestOperation JSONRequestOperationWithRequest:requestVideoUrlPublished success:^(NSURLRequest *requestURL, NSHTTPURLResponse *response, id getSTATS)
                                               {

                                                    _jsonDB= getSTATS;
                   //  NSLog(@"DB data is:%@",_jsonDB);
                   //I am getting json data here.Now I want to access _jsonDB in other                  //method ie -(void)openDataBase)                           
  }failure:nil];
                [operationURL start];
    }
 }

-(void)openDataBase

{
    NSLog(@"data in another class is :%@",_jsonDB);
  //here I am getting _jsonDB value as null
  //I want to to have _jsonDB value in this method
   //
}
4

3 回答 3

1

您正在通过异步调用设置变量的值,因此调用可能尚未完成并在您请求时设置变量。

你没有显示你用来调用这个变量的代码,但我怀疑你是在调用channelIDForDataBase然后调用openDataBase问题是因为第一次调用是异步的,它还没有完成它的网络调用,所以 ivar 没有没有设置。

您有几个可能的解决方案:其中一个可能适合您的情况是openDataBase在异步调用完成时进行调用:

AFJSONRequestOperation *operationURL = [AFJSONRequestOperation JSONRequestOperationWithRequest:requestVideoUrlPublished success:^(NSURLRequest *requestURL, NSHTTPURLResponse *response, id getSTATS) {
    _jsonDB= getSTATS;
    [self openDataBase];

failure:nil];
于 2013-08-14T06:42:39.053 回答
0

您将 id _jsonDB 指向 getSTATS 之后,getSTATS 将被释放,因此,实际上 _jsonDB 指向已被删除的内存空间。为 _jsonDB 创建了一个独立的内存空间,并将 getSTATS 的内容复制到其中。

做这样的事情。

_jsonDB =[getSTATS copy];
于 2013-08-14T06:41:10.323 回答
-1

我相信你的对象正在被释放。

做这个:

@interface DBForHomeViewController : UIViewController
@property (strong, nonatomic) id jsonDB;
@end

设置它

self.jsonDB = getSTATS;
于 2013-08-14T06:37:01.020 回答