变量超出视图控制器之间的范围
我正在研究基于导航的iphone应用程序。当我在堆栈上推新视图控制器时,我想传递一些信息,比如myObject。所以:变量超出视图控制器之间的范围
aViewController *vc = [[aViewController alloc] initwith....];
vc.object = myObject //myObject is defined in the current view controller
[self.navigationController pushViewController:vc]; //vc.object has correct value here
[vc release]
aViewController中的对象变量被设置为保留新对象。当我进入新的视图控制器的代码时会发生什么,我发现这个对象被设置为“超出范围”,但我无法得到它,尽管我已经检查过vc.object在视图控制器正在推动。
超出范围错误意味着什么,以及解决此问题的最佳方法是什么?谢谢!
好吧,真的很尴尬地宣布我把问题都弄错了。看起来这个对象首先已经超出了范围。 myObject实际上是[myObjectList objectForIndex:index]其中myObjectList是NSMutableArray * myObjectList。这不是一个综合财产。目的是从NSObject的派生的类(@interface对象:NSObject的)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
for(Object* p in myObjectList)
{
NSLog(@"%@", p.name); //this returns a garbled message
}
MyObjectDetailViewController * vc = [[MyObjectDetailViewController alloc] initWithStyle:UITableViewStylePlain];
vc.object = [myObjectList objectAtIndex:indexPath.row];
[self.navigationController pushViewController:vc animated:YES]; //when i hover over "vc" in debugger, it shows that vc.object is defined(i see my name variables) but when i hover over myObjectList in the previous line, the objects say "out of scope"
[vc autorelease];
}
要覆盖所有地面,这里是阵列被实例化。这个函数是一个来自sqlite的sqlite3_exec的回调函数。
int callback (void* context, int count, char** values, char** columns)
{
NSMutableArray *list = (NSMutableArray*)context;
Object *obj = [[Object alloc] initWithName:[NSString stringWithUTF8String:values[kName]]];
[list addObject:obj];
[obj release];
NSLog(@"After release");
for(Object *p in list)
{
NSLog(@"%@", p.name); //this prints out okay
}
return SQLITE_OK;
}
我希望这会让问题更清楚一点。 myObjectList超出范围的事实,但我似乎能够检索其对象是真的很奇怪...
据我所知,这实际上并没有显示数组实例化的位置:有些东西将它作为上下文参数传递给回调函数(并且您正在向其中添加东西),但它是如何实现的呢? – 2010-02-10 16:01:57
我做了,有一个 myObjectList = [[NSMutableArray alloc] init]; [self readObjectListFromDatabase]; //在initWithNibName中调用sqlite3_exec ...请告诉我是否还有其他任何可以帮助描述此问题的内容...我还检查了myObjectList和*上下文的地址(isa)以确保它们是一样的东西。 – Ying 2010-02-10 22:33:56
我有一个类似的问题。
在我的情况下,NSMutableArray被声明为类中的私有变量。
当我用同名的公共属性包装变量并添加“自我”。在didSelectRowAtIndexPath中的变量名之前,我的错误消失了。
此外,为了澄清,我在这里使用声明的属性,所以在我的aViewController接口中,我有: @property(nonatomic,retain)Object * object; //也sysnthesized – Ying 2010-02-09 17:14:20
什么类是对象?或者你的意思是NSObject? – 2010-02-09 17:21:25
是myObject被声明为保留属性吗? – willcodejavaforfood 2010-02-09 18:42:57