Как управлять данными между объектами с помощью UIPICKERVIEW?
У меня есть сценарий в моем основном приложении инвентаря.
Я получил записи из основного объекта данных и хочу, чтобы другие записи были введены для этого.
У меня есть два основных объекта данных Категория и продукт
Я также сделал их отношения.
Я сделал с частью категории.
Теперь я хочу добавить продукты против выбранной категории.
для этого я используюUIPICKERVIEW
показать название категории.
В настоящее время я показываю именаUIPICKERVIEW
Когда пользователь выбирает имя и вводит записи,id
должен храниться в сущности Product, где находится поле реляции.
В настоящее время UIPICKERVIEW показывает название категории из таблицы категорий.
где их - это форма для вставки данных в таблицу Product для этой категории.
В Простом я хочу показать имена в средстве выбора, а в бэкэнде идентификатор будет сохранен для этого имени.
В Category.h сущности у меня есть
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * is_active;
@property (nonatomic, retain) NSString * descript;
@property (nonatomic, retain) NSSet *products;
IN Product.h У меня есть
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * is_active;
@property (nonatomic, retain) NSString * descript;
@property (nonatomic, retain) Category *category;
IMSAddProductViewController.h
#import
#import "IMSAppDelegate.h"
@interface IMSAddProductViewController : UIViewController < UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate>
@property (weak, nonatomic) IBOutlet UIPickerView *categoryPicker;
@property (weak, nonatomic) IBOutlet UITextField *txtEnterName;
@property (weak, nonatomic) IBOutlet UITextField *txtEnterDescription;
@property (weak, nonatomic) IBOutlet UISwitch *txtIsActive;
@property (weak, nonatomic) IBOutlet UILabel *lblValuePicker;
@property(nonatomic,retain)NSArray *arr;
@property (assign, nonatomic) NSMutableArray *categoryArray;
- (IBAction)btnSave:(id)sender;
@end
Получение результатов из категории Entity 1
IMSAddProductViewController.m // (подкласс UIViewController)
#import "IMSAddProductViewController.h"
#import "IMSAppDelegate.h"
#import "Product.h"
#import "Category.h"
@interface IMSAddProductViewController ()
{
NSManagedObjectContext *context;
}
@end
@implementation IMSAddProductViewController
@synthesize arr;
@synthesize txtIsActive;
@synthesize categoryArray;
@synthesize txtEnterName;
@synthesize txtEnterDescription;
@synthesize categoryPicker;
@synthesize lblValuePicker;
- (void)viewDidLoad
{
[super viewDidLoad];
self.categoryPicker.delegate = self;
IMSAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
context = [appDelegate managedObjectContext];
NSEntityDescription *category = [NSEntityDescription entityForName:@"Category" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc ] init];
request.resultType = NSDictionaryResultType;
[request setEntity:category];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"name" ascending:YES];
[request setSortDescriptors:@[sortDescriptor]];
// request.propertiesToFetch = [NSArray arrayWithObject:[[category propertiesByName] objectForKey:@"name"]];
request.returnsDistinctResults = YES;
request.resultType = NSDictionaryResultType;
NSError *error;
NSArray *array = [context executeFetchRequest:request error:&error];
// NSMutableArray *results = [[context executeFetchRequest:request error:&error] mutableCopy];
if (array == nil) {
//error handle here
}
NSArray* results2 = [array valueForKeyPath:@"name"];
[self setArr:results2];
// [self setArr:results];
NSLog (@"name: %@",self.arr);
}
//-(void) addProducts:(NSSet *)values {
//
//}
- (NSInteger)numberOfComponentsInPickerView:
(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
// return _countryNames.count;
return self.arr.count;
}
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component
{
//return _countryNames[row];
return self.arr[row];
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
inComponent:(NSInteger)component
{
categoryArray = [self.arr objectAtIndex:row];
NSLog (@"name: %@",self.categoryArray );
// both of these are returning the name of categories.
self.categoryPicker = [self.arr objectAtIndex:row];
NSLog (@"name: %@",self.categoryPicker);
NSLog(@"id : %d", row);
}
КОД, ГДЕ Я ВСТАВЛЯЮ ДАННЫЕ В ПРОДУКТ
- (IBAction)btnSave:(id)sender {
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Product" inManagedObjectContext:context];
NSManagedObject *newProduct = [[NSManagedObject alloc]initWithEntity:entityDesc insertIntoManagedObjectContext:context];
[newProduct setValue:self.txtEnterName.text forKey:@"name"];
[newProduct setValue:self.txtEnterDescription.text forKey:@"descript"];
if (self.txtIsActive.isOn) {
[newProduct setValue: @(self.txtIsActive.isOn) forKey:@"is_active"];
}
else{
[newProduct setValue: @(self.txtIsActive.tag == '0') forKey:@"is_active"];
}
// what should be done in this block of code
/*
lblValuePicker.text = [NSString stringWithFormat:@"%d",[self.categoryPicker selectedRowInComponent:0]];
NSLog(@"row number: %@", lblValuePicker.text);
[newProduct setValue:lblValuePicker.text forKey:@"category"];
*/
NSError *error = nil;
if (![context save:&error]) {
//handle the error
NSLog(@"some error");
}
else
{
NSLog(@"dataentered");
}
}
ЗДЕСЬ СНИМОК, КОТОРЫЙ Я ЕГО ОТBASE
ОСНОВНЫЕ ДАННЫЕ, КОТОРЫЕ САМ УПРАВЛЯЮТ ИНДЕКСАМИ, КОТОРЫМИ Я ЕСТЬT СОЗДАЙТЕ ЛЮБОЙ ID ИЛИ ПЕРВИЧНЫЙ КЛЮЧ ДЛЯ ЭТОГО.