视图控制器之间的变量超出范围

时间:2010-02-09 16:56:05

标签: iphone objective-c

我正在开发基于导航的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在视图控制器时是有效的被推了。

超出范围错误意味着什么,解决此问题的最佳方法是什么?谢谢!

2 个答案:

答案 0 :(得分:1)

我有类似的问题。

在我的例子中,NSMutableArray被声明为类中的私有变量。

当我使用同名的公共属性包装变量并添加“self”时。在didSelectRowAtIndexPath中的变量名称之前,我的错误就消失了。

答案 1 :(得分:0)

好的,真的很尴尬地宣布我的问题都错了。看起来这个对象首先超出了范围。 myObject实际上是[myObjectList objectForIndex:index],其中myObjectList是NSMutableArray * myObjectList。这不是综合属性。 Object是从NSObject派生的类(@interface Object: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超出范围但我似乎能够检索其对象的事实真的很奇怪......