2014-01-07 4 views
0

내 엔터티에서 데이터를 배열로 가져 와서 데이터를 검색하려고합니다. 그것을 테스트 한 후 객체가 배열에 추가 된 것을 볼 수 있습니다. 문제는 테이블 뷰에 추가되지 않는다는 것입니다.엔터티에서 데이터 가져 오기

장치 (배열) 수를 사용할 때. saveTap이 작동한다는 것을 의미하는 20 개의 객체가 있다고합니다.

기업 enter image description here

왜 그들은있는 tableview에 가져 실 거예요?

.H

@interface PrivateViewController : UIViewController<UITableViewDataSource,  UITableViewDelegate, NSFetchedResultsControllerDelegate>{ 


} 
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController; 
@property (strong, nonatomic) IBOutlet UITableView *tableViewData; 
@property int selectedRowValue; 

-(IBAction)saveTap:(id)sender; 

하는 .m

배열 속성

@interface PrivateViewController() 

@property (strong) NSMutableArray *devices; 

@end 

하는 .m의 나머지

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

    // Fetch the devices from persistent data store 
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Entity"]; 
    self.devices = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy]; 

    [self.tableViewData reloadData]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // Return the number of sections. 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    return self.devices.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

// Configure the cell... 
    NSManagedObject *device = [self.devices objectAtIndex:indexPath.row]; 

    cell.textLabel.text = [NSString stringWithFormat:@"%@", [device  valueForKey:@"playlistName"]]; 

    return cell; 
} 

하는 .m의 saveTap

}

-(void)saveTap:(id)sender{ 
    Entity *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:_managedObjectContext]; 


    [newManagedObject setValue:textfield.text forKey:@"playlistName"]; 
    [newManagedObject setValue:[NSNumber numberWithInt:selectedRowValue] forKey:@"idnumber"]; 


    // Save the context. 
    NSError *error = nil; 
    if (![_managedObjectContext save:&error]) { 

     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } else { 

    } 
    [self.tableViewData reloadData]; 

    NSLog(@"%d", [_devices count]); 
} 

답변

1

문제에 대해 여러 가지 이유가 있습니다

  • 이있는 tableView 디스플레이 (20) 빈 행합니까? 그렇다면 : 에 실제로 값을 설정 했습니까?
  • 행이 전혀 없습니다. tableViewDatadataSource을 설정 했습니까?

편집 : 당신은이 viewDidAppear:에 managedObjectContext에 인출하고, 그래서 self.devices 나중에 업데이트되지 않습니다. 이것을 별도의 방법 (또는 saveTap:)으로 옮기고 tableView을 다시로드 할 때 이것을 호출하십시오.

Edit2 : 이제 tableView가 (셀 수)를 올바르게 표시합니다. textfield.text (saveTap:)의 값이 올바른지 확인 했습니까?

+0

나는 playlistName 값을 설정했고 데이터 소스를 설정했습니다. 좀 더 많은 정보와 saveTap 메소드를 제공했다. – user3140296

+0

방금 ​​내 대답을 편집했습니다. – tilo

+0

이것은 playlistName을 추가 한 후에 tableview를 업로드하는 것처럼 보이지만 여전히 이름을 표시하지는 않습니다. 그것은 장치 배열에 빈 행을 추가합니다. 그렇지 않으면 올바른 행을 가져 오지 못합니다. – user3140296

관련 문제