【问题标题】:NSDictionary variable not being passed to other methodsNSDictionary 变量未传递给其他方法
【发布时间】:2011-01-25 16:41:23
【问题描述】:

我有一个方法,它从 ViewController 获取一个 NSDictionary,并将它分配给我的 RequestModel 类中的一个全局 NSDictionary (cardDictionary) 变量。 cardDictionary 被声明为属性(非原子,保留)并且它是合成的。这工作正常(由 NSLog 验证)。这里是:

-(void)findIndexForCardPage:(NSDictionary*)dictionary  {
//parse here and send to a global dictionary
self.cardDictionary = dictionary;
NSLog(@"%@",cardDictionary);
}

现在,当我尝试在另一个方法中访问该变量时,仍然在 RequestModel 类中,它为空:

-(NSDictionary*)parseDictionaryForCardPage  {
//parse dictionary here for data needed on card page
NSLog(@"%@",cardDictionary);
return cardDictionary;

}

这个方法是从viewcontroller类调用的,cardDictionary为null。如何使 cardDictionary 保留以前方法中的数据?我尝试从 self.cartDictionary 中取出 self ......没有运气。还有什么我应该知道的吗?

【问题讨论】:

    标签: iphone ios nsdictionary


    【解决方案1】:

    如果您说 cardDictionary 是全局变量,而 self.cardDictionary - 可能访问实例变量。

    -(NSDictionary*)parseDictionaryForCardPage  {
    //parse dictionary here for data needed on card page
    NSLog(@"%@",cardDictionary);
    return cardDictionary;
    
    }
    

    您正在访问全局。删除它并使用实例变量。

    【讨论】:

    • 那行不通。 cardDictionary 被声明为属性(非原子,保留)并且它是合成的。我尝试了不使用自我,在两者上都使用自我......什么都没有。
    • 你有一个叫cardDictionary的变量吗?
    • 是的。我做了:@property(nonatomic,retain) NSDictionary *cardDictionary;然后@synthesize cardDictionary;也在 dealloc 中发布。
    • 对不起,你没有:) @property(nonatomic,retain) NSDictionary cardDictionary - 是属性,而不是变量。它只是无处可去。你必须声明变量: MyClass : NSObject { NSDictionry cardDictionary; } @property(nonatomic,retain) NSDictionary *cardDictionary; @end
    • 我认为这与我从另一个类调用 -(NSDictionary*)parseDictionaryForCardPage 有关。如果我从 RequestModel 调用它,一切正常。不过,它应该保留 cardDictionary 的值...
    【解决方案2】:

    您确定您的第二次调用 (parseDictionaryForCardPage) 使用的是与第一次调用 (findIndexForCardPage) 相同的 RequestModel 实例吗?

    【讨论】:

    • 是的,我确定。我已经通过调用这两种方法并在日志中打印值来测试它。但是,当我从另一个类调用 parseDictionaryForCardPage 时,这不起作用。
    • 我认为我们需要查看更多代码。具体来说,您拨打第一个电话的方式和地点以及拨打第二个电话的方式和地点。
    【解决方案3】:

    RequestModal 类中的属性应声明为保留:

    @property (nonatomic,retain) NSDictionary* cardDictionary;
    

    在类 RequestModal 的@implementation 部分中,您应该综合属性:

    @synthesize cardDictionary;
    

    而且这个方法是正确的:

    -(void)findIndexForCardPage:(NSDictionary*)dictionary  {
    //parse here and send to a global dictionary
    self.cardDictionary = dictionary;
    NSLog(@"%@",cardDictionary);
    }
    

    在这个方法中你应该添加 self.属性名称:

    -(NSDictionary*)parseDictionaryForCardPage  {
    //parse dictionary here for data needed on card page
    NSLog(@"%@",self.cardDictionary);
    return cardDictionary;
    
    }
    

    【讨论】:

    • 我已经将 cardDictionary 声明为一个属性。这对我不起作用。可能是因为我从另一个类调用 -(NSDictionary*)parseDictionaryForCardPage 吗?
    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多