2015-04-07 139 views
-1

我使用core data作为我的数据库。在我的UITableView里面,我有一个按钮来添加项目,但在这一刻我只用它来添加名称。但我添加的名称不会显示在桌面上。 我认为我的问题是我需要重新填充我的projectArray,我该如何以及在哪里做。 这里是我的代码:TableView不显示单元格内容

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

return [_projectArray count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    Project* project = _projectArray[indexPath.row]; 
    static NSString *cellID = @"TableCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath]; 
    cell.textLabel.text = project.name; 
    cell.detailTextLabel.text = @"prooo"; 
    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 
    return cell; 

} 

这里是我的按钮代码:

- (IBAction)addProjectButton:(id)sender { 
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Enter new project name." 
               message:nil 
               delegate:self 
             cancelButtonTitle:@"Cancel" 
             otherButtonTitles:@"Ok", nil]; 

alert.alertViewStyle = UIAlertViewStylePlainTextInput; 

[alert show]; 

UITextField *textField = [alert textFieldAtIndex:0]; 
textField.placeholder = @"Project Name"; 


} 
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
if (buttonIndex != alertView.cancelButtonIndex) { 
    UITextField *field = [alertView textFieldAtIndex:0]; 
    AppDelegate *delegate = [UIApplication sharedApplication].delegate; 
    NSManagedObjectContext *context = [delegate managedObjectContext]; 
    NSManagedObject *object =[NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:context]; 
    [object setValue:field.text forKey:@"name"]; 

    NSError *error; 
    [context save:&error]; 
    if (![context save:&error]) { 
     NSLog(@"Whoops %@ %@", error, [error localizedDescription]); 
    } 

    [self.tableView reloadData]; 

} else { 

    NSLog(@"cancel"); 
} 
} 

这里是我的viewWillAppear中的代码,我在那里获取信息:

- (void)viewWillAppear:(BOOL)animated { 
[super viewWillAppear:nil]; 

AppDelegate *delegate = [UIApplication sharedApplication].delegate; 
NSManagedObjectContext *context = [delegate managedObjectContext]; 

//load project 
NSFetchRequest *fetch = [[NSFetchRequest alloc]init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:context]; 
[fetch setEntity:entity]; 
NSError *error; 
_projectArray = [context executeFetchRequest:fetch error:&error]; 
} 
+0

你在哪里设置tableView的数据源和委托? – vikingosegundo

+0

也应该从提取请求中评估错误对象。 – vikingosegundo

回答

0

你有没有设置DataSource并委托tableView的属性?

self.tableView.delegate = self; 
self.tableView.dataSource = self; 
+0

是的,我有,但它对结果没有任何影响 – 000

0

更改此:

NSFetchRequest *fetch = [[NSFetchRequest alloc]init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:context]; 
[fetch setEntity:entity]; 
NSError *error; 
_projectArray = [context executeFetchRequest:fetch error:&error]; 

要:

_projectArray = [[NSMutableArray alloc]init]; 
NSFetchRequest *fetch = [[NSFetchRequest alloc]init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:context]; 
[fetch setEntity:entity]; 
NSManagedObject *object = nil; 
NSError *error; 
NSArray *result = [context executeFetchRequest:fetch error:&error]; 

for (int i = 0; i < [result count]; i ++) { 
object = [result objectAtIndex:i]; 
[_projectArray setObject:[object valueForKey:@"name"] 
} 
+0

它没有声明的数组的接口setObject – 000

+0

声明你的数组为NSMtableArray并初始化它 – Shruti

+0

好吧,我已经改变它为一个可变数组,你能帮我从那里? – 000

1

有很多事情可以做。为了使它成为一个很好的代码,我会建议编写一个重载数组的方法。像这样

-(void) reloadArray 
{ 
    AppDelegate *delegate = [UIApplication sharedApplication].delegate; 
    NSManagedObjectContext *context = [delegate managedObjectContext]; 

    //load project 
    NSFetchRequest *fetch = [[NSFetchRequest alloc]init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:context]; 
    [fetch setEntity:entity]; 
    NSError *error; 
    _projectArray = [context executeFetchRequest:fetch error:&error]; 
} 

那么这样的替换您的viewDidAppear -

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:nil]; 

    [self reloadArray]; 
} 
在numberOfSectionsInTableView

另外:方法,使这一变化 -

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    [self reloadArray]; 
    return 1; 
} 

它应该做的魔力......

相关问题