我有点陷入困境,我想知道这里的好人是否可以借给我他们的编程专业知识。我将尝试尽可能简单和精确,所以这里:
我是一名新的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方法之上声明它。
请对我温柔,因为我没有长时间这样做,但这肯定会成为我职业前途的重要部分。
任何人都可以提供给我的任何见解都是神奇的。
谢谢,谢谢,谢谢。
答案 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