Вывести данные из массива NSMutable в другой кончик через методы get? - PullRequest
0 голосов
/ 08 октября 2011

Я тщательно искал решение и не нашел его.Кажется, это действительно элементарно, что я пытаюсь сделать, однако все веб-страницы, которые я прочитал до сих пор, не обращаются к ним.

У меня есть два набора из 3 обычных файлов.

  • MyTableViewController.h .m .xib
  • TableViewDetails.h .m .xib

Когда пользователь нажимает на строку в MyTableViewController.xib, он отображает TableViewDetails.xibс содержимым массива, объявленного / заполненного в MyTableViewController.

  • Для демонстрации я хочу вызвать массив (tableDataList), передав числовую строку элемента, код, который может реализовать этозакомментировано

Так как мне этого добиться?

MyTableViewController.h

@interface MyTableViewController : UITableViewController {
    NSMutableArray *tableDataList;
}

@property (nonatomic, retain) IBOutlet UINavigationController *navCont;
@property (nonatomic, readwrite, retain) NSMutableArray *tableDataList;

//+ (NSString *)getTempArray:(int)number;
//- (NSString *) getTempArray_m: (int) number;   
@end

MyTableViewController.m

//#import "MyTableViewController.h"
#import "TableViewDetailsView.h"

@implementation MyTableViewController
@synthesize tableDataList;


- (void)viewDidLoad
{
    NSMutableArray *tempArray = [[[NSMutableArray alloc] initWithObjects:@"Item 1",@"Item 2",@"Item 3",@"Item 4",@"Item 5",@"Item 6", nil] autorelease];

    tableDataList = [[NSMutableArray alloc] init];
    tableDataList = tempArray;
}

//+ (NSString *)getTempArray:(int)number {
//    return [MyTableViewController getTempArray_m: number];
//}
//
//- (NSString *)getTempArray_m:(int)number {
//    
//    return [self.tableDataList objectAtIndex:number];
//}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    NSLog(@"pushing...");
    TableViewDetailsView *temp = [[[TableViewDetailsView alloc] initWithNibName:@"TableViewDetailsView"bundle:nil] autorelease];
     // ...
     // Pass the selected object to the new view controller.

     [self.navCont pushViewController:temp animated:YES];
}
@end

MyTableViewController.h

#import <UIKit/UIKit.h>
//#import "MyTableViewController.h"
//@class MyTableViewController;

@interface TableViewDetailsView : UIViewController {
    UIButton *buttonGetArray;
}   
@end

TableViewDetailsView.m

#import "TableViewDetailsView.h"
//#import "MyTableViewController.h"

@implementation TableViewDetailsView


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

//    MyTableViewController *MyTableVC = [[MyTableViewController alloc] init]; - This is Wrong
//    NSString *item = [MyTableViewController getTempArray:1];
//    NSLog(@"The Array item: %@", item);

}

Последние несколько слов, не могли бы вы предоставить действительные изменения кода, а не дополнять эти вопросы или давать ссылку на чтения.Я действительно хочу учиться, но считаю, что это не очень полезно, когда (на что похоже) простые вопросы здесь не рассматриваются.Во что бы то ни стало, дайте мне соответствующие указатели на информацию, но сначала решите проблему здесь, чтобы другие в будущем могли получить больше выгоды.Спасибо, что нашли время, чтобы прочитать мой вопрос.

1 Ответ

0 голосов
/ 08 октября 2011

Здесь нужно сделать несколько вещей. Во-первых, в

MyTableViewController.m

NSMutableArray *tempArray = [[[NSMutableArray alloc] initWithObjects:@"Item 1",@"Item 2",@"Item 3",@"Item 4",@"Item 5",@"Item 6", nil] autorelease];

// Use the setter of your instance variable here.
self.tableDataList = tempArray;

// Release your temp array (when you don't use ARC)
[tempArray release];

В

TableViewDetailsView.h Вы должны предоставить общедоступную переменную экземпляра, чтобы вы могли установить детали, которые вы хотите отобразить. Прямо сейчас это строка, которую вы хотите отобразить. Позже это может быть пользовательская модель с данными. Один из способов сделать это - объявить @property. Например, в TableViewDetailsView.h:

@property (nonatomic, retain) NSString *myDetailString;

Таким образом, вы инициализируете свой DetailViewController и устанавливаете данные, которые хотите отображать, прямо при нажатии пользователем строки. Таким образом, в вашем "- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath" в MyTableViewController.m вы делаете:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

TableViewDetailsView *temp = [[TableViewDetailsView alloc] initWithNibName:@"TableViewDetailsView"bundle:nil]; // No autorelease here!

 // Use the declared instace variable of the detailViewController
 temp.myDetailString = [self.tableDataList objectAtIndex:indexPath.row];

 [self.navCont pushViewController:temp animated:YES];

 // Clean up
 [temp release];
}

Если вы объявите myDetailString как IBOutlet, вы можете связать его с вашим файлом .xib и настроить в Интерфейсном Разработчике. В противном случае вам придется установить его в коде, например, в вашем методе viewDidLoad. Отображаемая строка уже установлена ​​внутри другого метода (didSelectRowAtIndexPath)… Надеюсь, это прояснит некоторые вещи. В противном случае спросите еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...