2015-04-07 6 views
-1

Я использую core data в качестве базы данных. Внутри моего UITableView у меня есть кнопка для добавления проектов, но в данный момент я использую ее только для добавления имен. Но имена, которые я добавляю, не отображаются в таблице. Я думаю, что моя проблема в том, что мне нужно повторно заполнить свой проектArray, как и где я это делаю. Вот мой код: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]; 

To:

_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

OK Я изменил его на изменяемый массив, вы можете просто помочь мне с там? – 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; 
} 

И это должно сделать волшебство ...