【问题标题】:iPhone addObject to NSMutableArray from another ViewController Using IBActioniPhone addObject 从另一个 ViewController 使用 IBAction 到 NSMutableArray
【发布时间】:2011-02-02 20:29:19
【问题描述】:

一旦用户点击“添加到收藏夹”按钮,我就会尝试将对象添加到 NSMutableArray,我可以将数据放入 NSDictionary,但是当我将 NSDictionary 传递给数组时,NSLog 会返回 nil。我错过了什么吗?

-(IBAction) addtofavorites: (id)sender
{
    NSArray *key = [NSArray arrayWithObjects:@"Title", @"Description", nil];
    NSArray *objects = [NSArray arrayWithObjects:CurrentTitle, description.text, nil];
    NSDictionary *fadd = [[NSDictionary alloc] initWithObjects:objects forKeys:key];

    FavoritesViewController *fvc = [[FavoritesViewController alloc] init];
    [fvc.favorites addObject:fadd];
    [FavoritesViewController release];
}

【问题讨论】:

  • 所以我朝不同的方向前进,但仍然遇到同样的问题。我现在正在使用核心数据保存我的最爱。我不确定如何将游戏添加到我的 NSManagedObjectContex。我有一个名为 Games 的类,想要传递 3 个 NSString。我是在我的 appDelegate、Games 还是在 ViewController 的 Context 中创建一个方法?当然,自学 Core Data 确实需要一些时间,但我想我现在已经掌握了它。谢谢

标签: iphone nsmutablearray


【解决方案1】:

我要做的是在您的头文件中为您保留的收藏夹视图控制器创建一个实例变量。然后在按下 addtofavorites 时使用惰性初始化。类似下面的东西

 if (!detailViewController) 
  {
    self.fvc = [[FavoritesViewController alloc] init];
  }

 [self.fvc.favorites addObject:fad];

然后在dealloc中释放FavoritesViewController对象

- (void)dealloc {
  [fvc release];
  [super dealloc];
}

【讨论】:

    【解决方案2】:
    FavoritesViewController *fvc = [[FavoritesViewController alloc] init];
    [fvc.favorites addObject:fadd];
    [FavoritesViewController release];
    

    看起来不对。您应该已经初始化了一个 FavoritesViewController(可以在其中访问它并调用 -addObject:)...

    编辑

    首先,当前视图控制器(定义了 -addtofavorites: 的那个)与 FavoritesViewController 有什么关系?用户将如何在这两个视图控制器之间导航?

    其次,收藏夹列表是否会在应用程序的不同运行中持续存在?如果是这样,您打算如何保存/恢复收藏夹?

    第三,与其将收藏夹添加到视图控制器,不如将它们添加到用于填充收藏夹视图控制器的底层“模型”中。

    将“模型”与“视图”分离会非常强大,同时还能简化您的代码。

    【讨论】:

    • 我在 DetailViewController 中创建 IBAction,这就是我在 IBAction 中分配和初始化它的原因
    • 但是你快速连续地分配、初始化和释放 fvc。为什么?
    • 因为我认为 fvc.favorites 应该有我的 NSDictionary 对象。所以我完成了我的收藏夹视图控制器
    • 嗯,是的,也不是。为了添加一个对象,您可能已经完成了您的收藏夹视图控制器,但是通过释放它,您实际上是在删除它。我将在编辑中详细说明我的原始答案。
    • 用户使用 TabbarController 在两个视图控制器之间导航
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多