问题:当从不同的类调用该方法时,某个类的变量会被忽略。
基本上:我有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似乎不会影响数组。
答案 0 :(得分:3)
从上面的代码中,看起来您的问题是每次调用toggleImage
方法时都在创建FoodListing的新实例。
这真的是你打算做的吗?如果是,ViewDidLoad在这种情况下不会被调用,因为你只是alloc
和init
视图控制器而不是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.}