2014-08-16 2 views
0

У меня есть приложение, которое контролируется tableview/pickerview, и для каждой таблицы я заполнял текстовые объекты.Невозможно импортировать NSMutableArray в другой класс и сохранить объекты tablecell

Теперь, когда клиент выбирает одну строку и переходит к следующей таблице, я хочу сохранить этот объект в NSMutableArray, который выделен/инициализирован в одном классе, и я хочу, чтобы этот файл класса был открыт, поэтому объекты могут быть добавлены из разных классов tableview в NSMutableArray.

Первые 2 файла: код MotorTVController работает хорошо, когда щелкнул ячейку tableview, объект добавлен в _myTrimArray, но я хочу сохранить следующий объект tablecell в том же _myTrimArray, я пытаюсь импортировать TrimArray. h (2 файла, последний в коде здесь) с той же функцией сохранения в MotorTVController, чтобы использовать savearraycode, но он не работает.

Поэтому я хочу, чтобы TrimArray.h/TrimArray.h мог сохранять все классы с табличными представлениями и значениями таблицы tableviewcell в один NSMutableArray.

Я пробовал с этим почти неделю, надеюсь, кто-то может дать мне решение, я новичок в этом, я знаю, что это не может быть так сложно решить, но я просто не знаю как?

//--------- MotorTVController.h 

#import "YearPickerTVControllerPolaris.h" 
#import "MotorTVController.h" 
#import "motorTVCell.h" 
#import "brandsTVCell.h" 
#import "TrimArray.h" 

@interface MotorTVController : YearPickerTVControllerPolaris 

@property (nonatomic, strong) NSArray *motorLabelArray; 
@property (nonatomic, strong) NSMutableArray *myTrimArray; 
@end 

//--------- MotorTVController.m file: 

#import "MotorTVController.h" 
#import "motorTVCell.h" 
#import "YearPickerTVControllerPolaris.h" 
#import "BackButton.h" 
#import "TrimArray.h" 

@interface MotorTVController() 
@end 
@implementation MotorTVController 
@synthesize myTrimArray = _myTrimArray; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

// Getter 

- (NSMutableArray *)myTrimArray 
{ 
    if (_myTrimArray == nil) { 
     _myTrimArray = [[NSMutableArray alloc] init]; 
    } 
    return _myTrimArray; 
} 

- (void)viewDidLoad 
{ 
    UIImage *arrow = [UIImage imageNamed:@"backbutton"]; 
    UIButton *arrowButton = [[UIButton alloc] initWithFrame:CGRectMake(-12, 0, 36, 36)]; 
    [arrowButton setBackgroundImage:arrow forState:UIControlStateNormal]; 
    [arrowButton addTarget:self action:@selector(back) 
      forControlEvents:UIControlEventTouchUpInside]; 

    UIView* buttonView = [[UIView alloc] initWithFrame:CGRectMake(-12, 0, 36, 36)]; 
    [buttonView addSubview:arrowButton]; 
    UIBarButtonItem * backbutton = [[UIBarButtonItem alloc] 
    initWithCustomView:buttonView]; 
    [self.navigationItem setLeftBarButtonItem:backbutton]; 
    [super viewDidLoad]; 

    _motorLabelArray = @[@"Original EH12 (4hk)", 
         @"Honda GX160 (5.5hk)", 
         @"Subaru EX17 (6hk)", 
         @"Honda GX200 (6.5hk)", 
         @"Briggs LO206 (9hk)", 
         @"Briggs WF206 (11HK)"]; 
    //NSLog(@"%@", _myTrimArray); 
} 

-(void)back 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return _motorLabelArray.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: 

(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"motorTVCell"; 
    motorTVCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier 
    forIndexPath:indexPath]; 

    // Configure the cell... 
    [cell setTintColor:[UIColor blackColor]]; 
    [cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton]; 
    [cell setAccessoryType:UITableViewCellAccessoryDetailButton]; 
    NSInteger row = [indexPath row]; 
    cell.motorCellLabel.text = _motorLabelArray[row]; 
    return cell; 
} 

    // Which row is selected 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: 
(NSIndexPath *)indexPath 
{ 
    NSInteger rowNumber = indexPath.row; 

    if (rowNumber == 0) 
    { 
     [_myTrimArray addObject:[_motorLabelArray objectAtIndex:0]]; 
     NSLog(@"You choosed %@", [_myTrimArray objectAtIndex:0]); 
    } 
    else if (rowNumber == 1) 
    { 
     [_myTrimArray addObject:[_motorLabelArray objectAtIndex:1]]; 
     NSLog(@"You choosed %@", [_myTrimArray objectAtIndex:1]); 
    } 
    else if (rowNumber == 2) 
    { 
     [_myTrimArray addObject:[_motorLabelArray objectAtIndex:2]]; 
     NSLog(@"You choosed %@", [_myTrimArray objectAtIndex:2]); 
    } 
    else if (rowNumber == 3) 
    { 
     [_myTrimArray addObject:[_motorLabelArray objectAtIndex:3]]; 
     NSLog(@"You choosed %@", [_myTrimArray objectAtIndex:3]); 
    } 
    else if (rowNumber == 4) 
    { 
     [_myTrimArray addObject:[_motorLabelArray objectAtIndex:4]]; 
     NSLog(@"You choosed %@", [_myTrimArray objectAtIndex:4]); 
    } 
    else if (rowNumber == 5) 
    { 
     [_myTrimArray addObject:[_motorLabelArray objectAtIndex:5]]; 
     NSLog(@"You choosed %@", [_myTrimArray objectAtIndex:5]); 
    } 
} 
@end 




     //-------------- TrimArray.m 

#import "TrimArray.h" 
#import "MotorTVController.h" 

@interface TrimArray() 

@end 

@implementation TrimArray 
@synthesize myTrimArray = _myTrimArray; 

// Getter 

- (NSMutableArray *)myTrimArray 
{ 
    if (_myTrimArray == nil) { 
     _myTrimArray = [[NSMutableArray alloc] initWithCapacity:10]; 
    } 
    return _myTrimArray; 
} 

@end 


//----------------- TrimArray.h: 

#import "MotorTVController.h" 

@interface TrimArray : NSMutableArray 

@property (nonatomic, strong) NSMutableArray *myTrimArray; 

@end 

ответ

0

Если я понял правильно ваш вопрос, вы хотите, чтобы ArrayObject быть доступны глобально для всех других ViewControllers верно?

Если да, то ваша подклассовская форма NSMutableArray и укажите ее. Свойство NSMutableArray неверно.

Для достижения этой цели самым простым решением будет использование NSUserDefaults.

Поражает объект ArrayObject Как показано ниже. // Получить объект в standardUserDefaults, хранить массив данных UITableView с ключом, синхронизация по умолчанию

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setObject:_trimArray forKey:@"TrimArray"]; 
[userDefaults synchronize]; 

Чтобы получить // вы можете извлечь ArrayObject из любой точки в вашем приложении.

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
NSArray *arrayOfObjects = [userDefaults objectForKey:@"TrimArray"]; 
// Use 'yourArray' to repopulate your UITableView 
+0

Большое спасибо за ответ, мне удалось заставить функцию сохранения работать. NSString * saveString = selectedRowInSpeedPickerView; NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: saveString forKey: @ "saveString"]; [синхронизация по умолчанию]; NSLog (@ "% @", selectedRowInSpeedPickerView); но у меня все еще есть проблемы с выполнением функции загрузки: NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; NSString * loadString = [defaults objectForKey: selectedRowInSpeedPickerView]; [selectedRowInSpeedPickerView loadString]; <--- Неправильно – Johan

+0

Нет проблем. что вы имеете в виду не правильно? Вы должны были использовать ключ «saveString», чтобы получить объект. попробуйте этот NSString * loadString = [defaults objectForKey: @ "saveString"], ваш комментарий запутан, что вы пытаетесь сделать. что делает этот код? [selectedRowInSpeedPickerView loadString]; – Ezimet

+0

Я хочу загрузить выбранное строковое значениеRowInSpeedPickerView и показать его NSlog, который я сохранил с помощью NSString * saveString = selectedRowInSpeedPickerView; NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: saveString forKey: @ "saveString"]; [синхронизация по умолчанию]; – Johan

Смежные вопросы