【发布时间】:2011-10-06 01:37:19
【问题描述】:
您好,我有一个选项卡选项卡控制器,我的第一个选项卡包含一个视图:
- 3 个文本字段
- 提交按钮
- 一个表格视图
填写完文本字段后,我单击提交,它会将信息添加到我的 managedObjectContext 中,它是一个 sqlite 数据库 (CoreData)。
单击提交后,我希望 tableView 重新加载以包含添加的对象。目前我的 tableView 将显示数据库中的数据,但它只会在我停止并重新运行模拟器时添加新行
这是点击添加按钮时的代码,在这里我无法让重新加载 tableView 工作,因为它说 tableView 是一个未声明的标识符,我错过了什么?
-(IBAction)addButtonTapped:(id)sender {
NSLog (@"Add Button Tapped");
NSLog(@"Adding %@ units of item code %@ at $%@ each",quantityTextField.text,productTextField.text,priceTextField.text);
Products_MarketAppDelegate* delegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext* managedObjectContext = delegate.managedObjectContext;
NSManagedObject* newProduct;
newProduct = [NSEntityDescription insertNewObjectForEntityForName:@"Product" inManagedObjectContext:managedObjectContext];
[newProduct setValue:productTextField.text forKey:@"itemCode"];
[newProduct setValue:quantityTextField.text forKey:@"quantity"];
[newProduct setValue:priceTextField.text forKey:@"price"];
if ([managedObjectContext hasChanges])
NSLog(@"Managed Object Changed");
NSError* error;
[managedObjectContext save:&error];
// Insert Reload Table Code Here
// ** I have tried the following and it gives an error "Use of undeclared identifier 'tableView'"
//[tableView reloadData];
//[self.tableView reloadData];
}
如下所示,我在头文件中添加了 UITableViewDelegate 和 UITableViewDataSource。我还在 IB 中连接了 tableview,以便委托和数据源连接链接到文件的所有者。
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@interface FirstViewController : UIViewController
<UIApplicationDelegate, UITableViewDataSource,UITableViewDelegate,NSFetchedResultsControllerDelegate>
{
IBOutlet UITextField *productTextField;
IBOutlet UITextField *quantityTextField;
IBOutlet UITextField *priceTextField;
NSMutableArray *items;
NSFetchedResultsController *fetchedResultsController;
}
@property (nonatomic, retain) NSMutableArray *items;
@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
-(IBAction)addButtonTapped:(id)sender;
@end
这是填充正确工作的tableView的代码
#pragma mark TableView
-(NSInteger)numberOfSectionsInTableView: (UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil){
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell
Product* productItem =[fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = [NSString stringWithFormat:@"%@ x %@ @ $%@",productItem.quantity,productItem.itemCode,productItem.price];
return cell;
}
我已经在这个网站和其他网站上搜索过答案,但我必须做一些不同的事情,而这些解决方案对我没有帮助
【问题讨论】:
标签: objective-c ios uitableview uitabbarcontroller reloaddata