iPhone从另一个viewController添加到NSMutableArray

时间:2011-01-02 12:13:42

标签: iphone arrays nsmutablearray

我有点陷入困境,我想知道这里的好人是否可以借给我他们的编程专业知识。我将尝试尽可能简单和精确,所以这里:

我是一名新的IOS开发人员,并且只学习了几个月。我正在为大学的论文开发一个iPhone应用程序。该应用程序只是一个指南,希望为iPhone自己开发,包括教程。它包含许多表格视图,但有一件事让我难过。

我想做什么: 我试图在我的应用程序中包含的一个功能是书签工具,可以从标签栏访问。我希望能够从任何nib文件(教程)中单击一个按钮,该文件将字符串添加到现有的NSMutableArray中。此字符串将与执行IB-Action的教程的名称相对应,并且在添加到Array之后,我可以在索引路径中选择行时加载nib文件。

问题: 我可以从包含该数组的实现文件中向数组添加任何对象,但无法弄清楚如何从不同的实现文件中添加它。 UITable视图完美地从数组填充,但添加新条目是另一个故事。

我会告诉你我的代码,但我会遗漏任何不相关的内容。

BookmarksViewController.h

@interface BookmarksViewController : UITableViewController {
 NSMutableArray *bookmarksArray;
}

@property (nonatomic, retain) NSMutableArray *bookmarksArray;
@end

BookmarksViewController.m

-(void)viewDidLoad {

 bookmarksArray  = [[NSMutableArray alloc] init];

 NSLog(@"String Added");
    [bookmarksArray addObject:@"String"];
  [super viewDidLoad];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {   
    // Configure the cell...
    cell.textLabel.text = [bookmarksArray objectAtIndex:indexPath.row];
    return cell;
}

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

现在为第二视图控制器

Ch01GettingStarted.h

@interface Ch01GettingStarted : UIViewController {
 IBOutlet UIScrollView *ScrollView;
}
-(IBAction) pushChap01Bookmark:(id)sender;

@end

Ch01GettingStarted.m

-(IBAction) pushChap01Bookmark:(id)sender{ 

 BookmarksViewController *bookmarksViewController = [[BookmarksViewController alloc]init];

 [bookmarksViewController.bookmarksArray addObject:@"NewString"];
 NSLog(@"ADD ENTRY");
 [bookmarksViewController.tableView reloadData];
 NSLog(@"RELOAD TABLE");
 [bookmarksViewController release];
 NSLog(@"ADD BOOKMARK RELEASE");
}

BTW - IB-Action在头文件中声明。

啊,我最初尝试这样做'[BookmarksViewController.bookmarksArray addObject:@“NewString”];'但我想出了一个“预期的':'at'。'”错误,我在某处读到了我需要使用BookmarksViewController的实例变量,所以我在addObject方法之上声明它。

请对我温柔,因为我没有长时间这样做,但这肯定会成为我职业前途的重要部分。

任何人都可以提供给我的任何见解都是神奇的。

谢谢,谢谢,谢谢。

3 个答案:

答案 0 :(得分:1)

问题在于这种方法:

-(IBAction) pushChap01Bookmark:(id)sender

您正在此处创建一个新的bookmarksViewController:

BookmarksViewController *bookmarksViewController = [[BookmarksViewController alloc]init];

您不希望这样做,因为您想要更新当前视图控制器。您需要从Ch01GettingStarted创建一个链接。

假设您使用的是Interface Builder,您可以使用IBOutlet创建此链接。在Ch01GettingStarted界面中,添加以下行:

IBOutlet BookmarksViewController *bookmarksViewController;

(括号之间)

我想你已经知道如何在Interface Builder中链接它。

然后删除此行:

BookmarksViewController *bookmarksViewController = [[BookmarksViewController alloc]init];

这一行:

[bookmarksViewController release];

它应该有用。

为什么呢? 'bookmarksViewController'变量现在引用实际显示的原始对象(您在Interface Builder中创建的对象)。

答案 1 :(得分:0)

只是为了确定。 你在BookmarksViewController.m中有这个方法吗?

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  [bookmarksArray count];
}

答案 2 :(得分:0)

因为创建了bookmarksViewController之后。 ViewDidLoad方法尚未运行。尚未创建bookmarksArray。所以bookmarksArray = nil。您无法将对象添加到nil对象。在Second Viewcontroller中,您应该在loadView方法中创建bookmarksViewController。并在pushChap01Bookmark中添加对象。

我英语不好。我希望你能理解它。 :D