Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Objective-C

Войти
Регистрация
Восстановить пароль
 
ermolushka
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 5
#1

Как записать данные в соответствующую категорию с Core Data? - Objective-C

19.11.2014, 17:06. Просмотров 896. Ответов 3
Метки нет (Все метки)

У меня есть Table View, где перечислены каталоги (Английский, Испанский, Китайский). Зайдя в каталог, я могу создать новую запись ( за это отвечает View Controller). При создании записи, она появляется во всех трех каталогах (англ, испан и кит). Как сделать так, чтобы она появилась лишь в соответствующем каталоге? Использовал Core Data.



Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#import "CardTableViewController.h"
@import CoreData;
 
@interface CardTableViewController ()
 
@property (strong) NSMutableArray *collections;
 
@end
 
@implementation CardTableViewController
 
- (NSManagedObjectContext *)managedObjectContext
{
    NSManagedObjectContext *context = nil;
    id delegate = [[UIApplication sharedApplication] delegate];
    if ([delegate performSelector:@selector(managedObjectContext)]) {
        context = [delegate managedObjectContext];
    }
    return context;
}
 
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    
    // Fetch the devices from persistent data store
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Collection"];
    self.collections = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
    
    [self.tableView reloadData];
}
 
 
 
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
 
#pragma mark - Table view data source
 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
#warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1;
}
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
#warning Incomplete method implementation.
    // Return the number of rows in the section.
    return self.collections.count;
}
 
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    
    
    // Configure the cell...
    NSManagedObject *collection = [self.collections objectAtIndex:indexPath.row];
    [cell.textLabel setText:[NSString stringWithFormat:@"%@", [collection valueForKey:@"name"]]];
   
  
    
    return cell;
}
 
 
 
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
 
 
 
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    
    NSManagedObjectContext *context = [self managedObjectContext];
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete object from database
        [context deleteObject:[self.collections objectAtIndex:indexPath.row]];
        
        NSError *error = nil;
        if (![context save:&error]) {
            NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]);
            return;
        }
        
        // Remove device from table view
        [self.collections removeObjectAtIndex:indexPath.row];
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}
 
@end
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#import "CardEditViewController.h"
@import CoreData;
 
@interface CardEditViewController ()
 
 
 
@end
 
@implementation CardEditViewController
 
- (NSManagedObjectContext *)managedObjectContext {
    NSManagedObjectContext *context = nil;
    id delegate = [[UIApplication sharedApplication] delegate];
    if ([delegate performSelector:@selector(managedObjectContext)]) {
        context = [delegate managedObjectContext];
    }
    return context;
}
 
- (IBAction)cancel:(id)sender {
    [self.navigationController popViewControllerAnimated:YES];
    
}
 
- (IBAction)save:(id)sender {
    NSManagedObjectContext *context = [self managedObjectContext];
    
    // Create a new managed object
    NSManagedObject *newCollection = [NSEntityDescription insertNewObjectForEntityForName:@"Collection" inManagedObjectContext:context];
    [newCollection setValue:self.nameCommon.text forKey:@"name"];
 
    
    NSError *error = nil;
    // Save the object to persistent store
    if (![context save:&error]) {
        NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
    }
    
    [self.navigationController popViewControllerAnimated:YES];
}
 
 
 
 
 
@end
Objective-C
1
2
3
4
5
6
7
8
9
10
#import <UIKit/UIKit.h>
 
@interface CardEditViewController : UIViewController
 
@property (weak, nonatomic) IBOutlet UITextField *nameCommon;
 
- (IBAction)save:(id)sender;
- (IBAction)cancel:(id)sender;
 
@end
Entity: Collection, attributes: name, type: String
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 17:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как записать данные в соответствующую категорию с Core Data? (Objective-C):

Improve Core Data skills - Программирование iOS
Привет всем. Как-то так печально у меня складывался рабочий опыт, что с CoreData особо проектов и не было. А если и было (две штуки),...

core data, две сущности - Программирование iOS
Привет. Есть база, в ней две сущности, предположим «факультет» и «студент» между ними связь много к одному и обратно). Требуется ...

Нужно разъяснение с Core Data - Программирование iOS
Всем привет! Толи я идиот тупой, толи с возрастом соображалка перестает работать нормально, но я никак ни по книжкам, ни по примерам...

core data newManagedObject setValue: - Программирование iOS
Уважаемые форумчане! Возникла следующая проблема: создаю DataModel, добавляю Entity, добавляю attribute string. Когда выполняю ......

Использование Core Data в статической библиотеке - Программирование iOS
Доброго времени суток. Прошу у вас помощи в разъяснение важного мне вопроса. Я пишу статическую библиотеку для iOS. Всё бы хороше, да...

Core Data проверка уникальности записи - Программирование iOS
Добрый вечер! Вливаюсь в CoreData потихоньку, почти все понятно, кроме вот чего: не могу до конца понять, как работает проверка данных. ...

3
vitali36
7 / 7 / 2
Регистрация: 09.02.2014
Сообщений: 91
19.11.2014, 17:47 #2
Смотри. У тебя есть каталог (один энтити), а у каталога есть записи. Т.е у каталога создаешь релейшншип запись, создаешь еще энтити "запись", атрибутом которого будет скажем name. Теперь рассуждаешь так: к примеру у каталога может быть много записей, а у записи много каталогов. Значит свзяь многие ко многим. Устанавливаешь для каталога cascade(если удалиться каталог, то и удалятся все записи), а для записи Nulify(если удалим запись, то каталог останется жить и без нее) И добавить для FetchRequest NSPredicate.
Objective-C
1
2
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"collection == %@",self.collection);
 [fetchRequest setPredicate:predicate];
Этим самым ты возьмешь те записи, которые соответствуют твоему текущему каталогу
0
ermolushka
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 5
19.11.2014, 18:17  [ТС] #3
Так, я создал еще Entity Card с атрибутом name.
Возникло два вопроса:

1. В разделе inverse ставить no inverse relationship?

2. Блок
Objective-C
1
2
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"Collection == %@", self.collections];
    [fetchRequest setPredicate:predicate];
нужно включить сюда?

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#import "CardTableViewController.h"
@import CoreData;
 
@interface CardTableViewController ()
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    
    // Fetch the devices from persistent data store
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Collection"];
    self.collections = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"Collection == %@", self.collections];
    [fetchRequest setPredicate:predicate];
    [self.tableView reloadData];
}
или сюда

Objective-C
1
2
3
4
5
6
7
8
9
10
11
#import "CardEditViewController.h"
@import CoreData;
 
@interface CardEditViewController ()
 
- (IBAction)save:(id)sender {
    NSManagedObjectContext *context = [self managedObjectContext];
    
    // Create a new managed object
    NSManagedObject *newCollection = [NSEntityDescription insertNewObjectForEntityForName:@"Collection" inManagedObjectContext:context];
    [newCollection setValue:self.nameCommon.text forKey:@"name"];
По сути, сейчас создается новый объект в энтити Коллекции, а мне нужно, чтобы объект создавался в энтити Card и заполнял массив Collections.
0
vitali36
7 / 7 / 2
Регистрация: 09.02.2014
Сообщений: 91
19.11.2014, 19:37 #4
Inverse ставить. Именно так. Добавляешь новый объект в энтити. Блок вставляй там, где создаешь реквест и энтитидескрипшн
0
19.11.2014, 19:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2014, 19:37
Привет! Вот еще темы с ответами:

core data запрос на получение суммы атрибута, всех записей - Программирование iOS
Привет, есть сущность продукция имеющая свои атрибуты один из них цена, Есть н продукций нужно найти сумму всех цен Для этого я...

Муки выбора: core data или работа "напрямую" с sqlite - Программирование iOS
Здравствуйте! Я новичок в разработке под osx и ios, но так как база на сях и плюсах была (когда-то давно), то идет это дело у меня довольно...

Можно ли модуль записать в категорию - Joomla
Помогите решить следущую задачу. У меня есть пункт меню,который привязан к категории.Я установил модуль яндекс карты. Как мне засунуть этот...

Записать клаузу, соответствующую легенде - Логика и множества
Запишите с использованием 4-6 различных букв клаузу, отвечающую тексту легенды, для чего сформулируйте необходимые посылки и следствие.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru