#ios
#iOS
Вопрос:
Здравствуйте, друзья, я работаю с CoreData, и я новичок в этом .. Я прочитал официальную документацию coredata и попытался поиграть с ней…
Итак, что я сделал, я пишу поэтапно..
1. Сначала я создал проект на базе windowbased с выбранным параметром coredata
2. Я открыл xcdatamodeld и добавил один объект с именем «Employee» и тремя атрибутами..а) имя б) Отдел в) Обозначение..
3. Я создал сотрудника.h и employee.m
4. Теперь в моем первом TableViewController.я написал этот код
- (void)viewDidLoad
{
[super viewDidLoad];
Employee *emp = (Employee *)[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:managedObjectContext];
Employee *emp1 = (Employee *)[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:managedObjectContext];
m_employeeArray = [[NSMutableArray alloc]init];
[emp setName:@"Jack"];
[emp setDept:@"Accounts"];
[emp setDesignation:@"Manager"];
[emp1 setName:@"Joseph"];
[emp1 setDept:@"Finance"];
[emp1 setDesignation:@"Manager"];
[m_employeeArray addObject:emp];
[m_employeeArray addObject:emp1];
//Code to save the data..
NSError *error = nil;
if (![managedObjectContext save:amp;error]) {
// Handle the error.
}
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
m_mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:amp;error]mutableCopy];
if (m_mutableFetchResults == nil) {
// Handle the error.
}
for (Employee *info in m_mutableFetchResults)
{
NSLog(@"Name: %@", emp.Name);
NSLog(@"Name: %@", emp.Dept);
NSLog(@"Name: %@", emp.Designation);
}
}
и мои методы делегирования таблиц приведены ниже
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [m_employeeArray count];
}
- (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...
Employee *emp = (Employee *)[m_employeeArray objectAtIndex:indexPath.row];
cell.textLabel.text = emp.Name;
return cell;
}
и поэтому, когда я загружаю представление, я получаю ячейку, заполненную двумя именами, то есть Джеком и Джозефом
Здесь вы можете видеть, что я сохраняю данные в m_mutableFetchResults и показываю вывод в консоли, и при каждом запуске проекта данные сохраняются и работают нормально..
Теперь я создал другой tableviewcontroller под названием SecondTableViewController
так что при выборе FirstTableViewController я покажу secondTableViewController, заполненный m_mutableFetchResults
итак, ниже мой
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
SecondTableViewController *detailViewController = [[SecondTableViewController alloc] initWithNibName:@"SecondTableViewController" bundle:nil];
[detailViewController setSavedArray:m_mutableFetchResults];
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}
и я заполняю secondTableViewController с помощью [savedArray count], но массив во secondTableViewController пуст..Я не понимаю, где я ошибаюсь…
Итак, друзья, я изо всех сил старался, чтобы вы все поняли мою проблему…
Поэтому, пожалуйста, помогите мне.
Ответ №1:
где вы пытаетесь получить элементы savedArray во SecondTableViewController? если вы попытаетесь получить их методом init, в то время массив будет равен нулю. метод pushViewController:animated: вызовет метод viewDidLoad, и вы должны увидеть результаты. ps: Я рекомендую вам не сохранять savedArray в SecontTableViewController, потому что это может привести к сбою вашего кода, если какие-либо объекты изменятся во время выполнения.
Комментарии:
1. Привет, спасибо за ваш ответ, в seconviewTableViewcontroller, в методе viewDidLoad, я сначала инициализировал savedarray, а затем использовал его в методах делегирования таблицы.
2. Привет, друзья, пожалуйста, помогите мне