Как управлять данными между объектами с помощью 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 ИЛИ ПЕРВИЧНЫЙ КЛЮЧ ДЛЯ ЭТОГО.

Ответы на вопрос(1)

Ваш ответ на вопрос