Instance方法无法读取类实例变量

时间:2011-10-23 03:58:12

标签: iphone objective-c class

问题:当从不同的类调用该方法时,某个类的变量会被忽略。

基本上:我有A班,B班。我在各自的班级也有方法A,方法B.

从B类方法B调用方法A时,我可以很好地使用NSLog值,但是我无法访问A类中包含的NSMutableArray。这是我的问题。

// Class B
- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
        foodListingObj = [[FoodListing alloc] initWithNibName:@"FoodListing" bundle:nil];
    }


    return self;
}    

- (void)toggleImage //Method B in Class B {

    [foodListingObj didToggle:self.indexOfToggledCell];
    }

    // Method in Class A
    - (void)didToggle:(NSIndexPath *)toggledIndexPath{
        //[_toggledIndexArray addObject:toggledIndexPath];
          [_toggledIndexArray addObject:@"Anything"];
    }

    // Method in Class A
    - (void)checkArray{

          // Log the count of the array
          // it always says 1 because I intialize the array
          // then add an an object like so [_toggledIndexArray addObject@"hi"];
         // in my ViewDidLoad Method. Hence it appears that the array is still around
          // (not deallocated), but yet my method cannot seem to touch it... 
          NSLog(@"%i",[_toggledIndexArray count]); 
    }

     // dealloc for Class A
    - (void)dealloc{
          // I release the array among other things
          [_toggledIndexArray release];
    }

数组(_toggledIndexArray)是在头文件中声明的属性,并在Class A的viewDidLoad中初始化为

_toggledIndexArray = [[NSMutableArray alloc] init];

错误是由于我不知道的原因,方法A似乎不会影响数组。

2 个答案:

答案 0 :(得分:3)

从上面的代码中,看起来您的问题是每次调用toggleImage方法时都在创建FoodListing的新实例。

这真的是你打算做的吗?如果是,ViewDidLoad在这种情况下不会被调用,因为你只是allocinit视图控制器而不是initWithNibName,所以除非你是在自定义loadView方法中执行某些操作,不会有加载的视图。

但是,我不希望你每次都想创建一个新实例,你的代码的含义是FoodListing对象已经存在并且已经填充了数组。

因此,无论“b类”是什么,都声明一个FoodListing类型的属性。将此设置为FoodListing视图控制器(这将在创建或显示类b时,或者在首次创建FoodListing对象时,您没有给出足够的上下文供我说)。调用属性中保存的对象上的方法,而不是创建新方法。

答案 1 :(得分:0)

您需要将Class B中的FoodListing对象维护为类变量,而不是始终在toggleImage函数中对其进行alloc / init。也许

if(self.foodListing==nil) { //alloc/init it}else{ //do your thing here.}