【问题标题】:Passing data from delegate to viewcontroller iOS将数据从委托传递到视图控制器 iOS
【发布时间】:2011-09-18 19:12:22
【问题描述】:

我正在尝试将 NSArray 从 appDelegate 传递给 viewController,但似乎数据没有被保留。例如。 'courseArray' 包含 appDelegate 中的值,但在 viewController 中它是空的。我做错了什么?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    


    CourseSelectController *courseTimeTableView = [[CourseSelectController alloc] initWithNibName:nil bundle:nil];
    courseTimeTableView.courseArray = self.courseArray;
    [courseTimeTableView release];

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[WestminsterViewController alloc] init] autorelease];

    if([self.window respondsToSelector:@selector(setRootViewController:)])
    {
        [self.window performSelector:@selector(setRootViewController:) withObject:self.viewController];
    }
    else
    {
        [self.window addSubview:[self.viewController view]];
        [self.viewController.view setFrame:[self.window bounds]];
    }
    [self.window makeKeyAndVisible];
    return YES;

}

【问题讨论】:

  • 你为什么在分配后立即在courseTimeTableView 上调用release?你还没有retained 它,或者给另一个对象retain 它的机会。这会导致问题。

标签: objective-c ios xcode ios4 delegates


【解决方案1】:

您将courseArray 分配给CourseSelectController 的一个实例,然后立即通过释放它来丢弃该控制器。

然后,您创建一个 WestminsterViewController 并将其指定为窗口的根视图控制器,但该视图控制器从未被指定为 courseArray。

【讨论】:

    【解决方案2】:

    好吧,您在分配 courseArray 后立即释放 courseTimeTableView。

    【讨论】:

      【解决方案3】:

      您的代码存在一些严重问题。

      在第二行中,当您使用 self.courseArray 设置 courseTimeTableView.courseArray 时,self.courseArray 只返回 nil(假设您使用的是常规合成属性)。

      然后在第三行,释放视图控制器!它的保留计数仅为 1,因此已被释放且不再可用。

      从修复这些开始:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-01
        • 2018-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-20
        相关资源
        最近更新 更多