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

Подскажте код для замены выбранной записи в базе - Программирование iOS

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование iOS Работа с UIAlertView http://www.cyberforum.ru/ios-dev/thread891763.html
Привет, форумчане! :) Я пишу приложение, которое представляет собой тесты на футбольную тематику (вы могли видеть подобное в контакте - приложение "карьера" и пр.). Так вот, когда пользователь отвечает на вопрос, на экране появляется лэйбл, где написано, правильно он ответил или нет, после чего он жмет кнопку "Дальше" и отвечает на следующий вопрос. Так вот, моя проблема заключается в следующем:...
Программирование iOS Диплом Магистра День добрый, Господа Я вот ломаю уже неделю себе голову - что можно высосать из objective-c/ios связки на дипломную работу, все никак не могу придумать. А то диплом уже в след. году, а конь еще не полежал как следует. Интересует эта связка, так как уже пару лет занимаюсь разработкой, и брать другие технологии не очень хочется. Может будут какие-нибудь идеи? Были варианты от распознования... http://www.cyberforum.ru/ios-dev/thread890462.html
Простейшая программа! Программирование iOS
Здравствуйте! Мне очень нужно к середине-концу месяца сделать приложение на Iphone, начал делать вчера, установил Xcode, начал читать про Objective C и прочие уроки работы, но так и не смог, активировать кнопку на главной странице предложения, чтобы она правильно функционировала!:( Собственно по поводу приложения - Приложение является небольшим справочником, включающим в себя расписание...
Ошибка при использовании шаблона Master-Detail Application Программирование iOS
Помогите, пожалуйста, разобраться с кодом, перерыл весь интернет так и не понял почему у меня выбивает ошибку. Я хочу чтобы шаблон "Master-Detail Application" (с Core Data) разместился на одной из вкладок. Я создаю шаблон "Master-Detail Application" кидаю на сториборд UITabBarController перемещаю указатель на него. И все… Как только перехожу на вкладку с таблицей приложение вылетает.. ...
Программирование iOS Сколько часов займёт написание http://www.cyberforum.ru/ios-dev/thread888978.html
Добрый день! Подскажите пожалуйста примерно, из Вашего опыта - сколько ПРИМЕРНО времени занимает написание клиента под iOS - описание: клиент для онлайн заказа такси или суши - то есть окно выбора адреса, просмотр карты возможно, автоопределение адреса по GPS, подытог заказа (что то вроде корзины, чека) - отправка заявки, сохранение истории... Понятно что вызов такси попроще будет - 2 адреса...
Программирование iOS Не получается прочитать Базу Данных из ресурсов приложения Вот функция: -(void) initDataBase { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = ; NSString *dbFileName = @"myBase.sqlite"; NSString *databasePath = ; dataBaseFullPath = databasePath; подробнее

Показать сообщение отдельно
trims
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 20

Подскажте код для замены выбранной записи в базе - Программирование iOS

05.06.2013, 14:56. Просмотров 471. Ответов 1
Метки (Все метки)

Помогите с Core Data

Подскажте код для замены выбранной записи в базе. В приложение (на шаблоне "Master-Detail Application") после выбора ячейки в MasterViewController я перехожу в представление DetailViewController и там по нажатии кнопки нужно изменить выбранное значение:

Objective-C
1
2
3
4
5
6
7
8
9
- (IBAction)newButton:(id)sender {
    
    NSString * oldString = [[self.detailItemvalueForKey:@"stringTest"] description];
    NSString * newString = @"Новое значение!";
    
    // Код замены значения "stringTest" на новое в базе
 
    NSLog(@"Тест: %@, %@", oldString, newString);
}
Подскажите как это можно сделать?


Код MasterViewController.h/m:

Objective-C
1
2
3
4
5
6
7
8
9
10
#import <UIKit/UIKit.h>
 
#import <CoreData/CoreData.h>
 
@interface MasterViewController : UITableViewController <NSFetchedResultsControllerDelegate>
 
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
 
@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
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#import "MasterViewController.h"
 
#import "DetailViewController.h"
 
@interface MasterViewController ()
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
@end
 
@implementation MasterViewController
 
- (void)awakeFromNib
{
    [super awakeFromNib];
}
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.navigationItem.leftBarButtonItem = self.editButtonItem;
 
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
    self.navigationItem.rightBarButtonItem = addButton;
}
 
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
 
- (void)insertNewObject:(id)sender
{
    NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
    NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
    NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
    
    // If appropriate, configure the new managed object.
    // Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template.
    [newManagedObject setValue:@"Тест!" forKey:@"stringTest"];
    
    // Save the context.
    NSError *error = nil;
    if (![context save:&error]) {
         // Replace this implementation with code to handle the error appropriately.
         // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
}
 
#pragma mark - Table View
 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [[self.fetchedResultsController sections] count];
}
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    id <NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController sections][section];
    return [sectionInfo numberOfObjects];
}
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    [self configureCell:cell atIndexPath:indexPath];
    return cell;
}
 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
        [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
        
        NSError *error = nil;
        if (![context save:&error]) {
             // Replace this implementation with code to handle the error appropriately.
             // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }
    }   
}
 
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    // The table view should not be re-orderable.
    return NO;
}
 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
        [[segue destinationViewController] setDetailItem:object];
    }
}
 
#pragma mark - Fetched results controller
 
- (NSFetchedResultsController *)fetchedResultsController
{
    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }
    
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    // Edit the entity name as appropriate.
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];
    
    // Set the batch size to a suitable number.
    [fetchRequest setFetchBatchSize:20];
    
    // Edit the sort key as appropriate.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"stringTest" ascending:NO];
    NSArray *sortDescriptors = @[sortDescriptor];
    
    [fetchRequest setSortDescriptors:sortDescriptors];
    
    // Edit the section name key path and cache name if appropriate.
    // nil for section name key path means "no sections".
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Master"];
    aFetchedResultsController.delegate = self;
    self.fetchedResultsController = aFetchedResultsController;
    
    NSError *error = nil;
    if (![self.fetchedResultsController performFetch:&error]) {
         // Replace this implementation with code to handle the error appropriately.
         // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
    
    return _fetchedResultsController;
}    
 
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
    [self.tableView beginUpdates];
}
 
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo
           atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type
{
    switch(type) {
        case NSFetchedResultsChangeInsert:
            [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
            break;
            
        case NSFetchedResultsChangeDelete:
            [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}
 
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
       atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath
{
    UITableView *tableView = self.tableView;
    
    switch(type) {
        case NSFetchedResultsChangeInsert:
            [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;
            
        case NSFetchedResultsChangeDelete:
            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;
            
        case NSFetchedResultsChangeUpdate:
            [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
            break;
            
        case NSFetchedResultsChangeMove:
            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
            [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}
 
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
    [self.tableView endUpdates];
}
 
 
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
    NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = [[object valueForKey:@"stringTest"] description];
}
 
@end
Код DetailViewController.h/m:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
#import <UIKit/UIKit.h>
 
@interface DetailViewController : UIViewController
 
@property (strong, nonatomic) id detailItem;
 
@property (weak, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
 
- (IBAction)newButton:(id)sender;
 
@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
48
49
50
51
52
53
#import "DetailViewController.h"
 
@interface DetailViewController ()
- (void)configureView;
@end
 
@implementation DetailViewController
 
#pragma mark - Managing the detail item
 
- (void)setDetailItem:(id)newDetailItem
{
    if (_detailItem != newDetailItem) {
        _detailItem = newDetailItem;
        
        // Update the view.
        [self configureView];
    }
}
 
- (void)configureView
{
    // Update the user interface for the detail item.
    
    if (self.detailItem) {
        self.detailDescriptionLabel.text = [[self.detailItem valueForKey:@"stringTest"] description];
    }
}
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self configureView];
}
 
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
 
- (IBAction)newButton:(id)sender {
    
    NSString * oldString = [[self.detailItem valueForKey:@"stringTest"] description];
    NSString * newString = @"Новое значение!";
    
    // Код замены значения "stringTest" на новое в базе
 
    NSLog(@"Тест: %@, %@", oldString, newString);
}
 
@end
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru