Xcode 5:在没有Segue的情况下在UITableViewController和UICollectionViewController之间传递数据

时间:2014-06-09 16:20:23

标签: ios objective-c xcode5 uitableview pass-data

我是法国人,很抱歉我的英语不好......

我想传递数据NSString *cellSelected。 这是我的代码,谢谢你说出了什么问题:)

#import "PhotoViewController.h"

@interface PhotoCategoryViewController : UITableViewController

@property (nonatomic, strong) NSArray *categoryName;

@property (nonatomic,strong) NSString *cellSelected;

@end

@implementation PhotoCategoryViewController

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

  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

  self.cellSelected = cell.textLabel.text;

  NSLog(@"selected cell textLabel = %@",self.cellSelected);

  PhotoViewController *viewcontroller = [[PhotoViewController alloc] init];

  viewcontroller.cellSelected = self.cellSelected;

}

和第二节课:

#import "PhotoCategoryViewController.h"
   @interface PhotoViewController : UICollectionViewController     <UICollectionViewDataSource>

@property (nonatomic, strong) NSString *cellSelected;

- (void)viewWillAppear:(BOOL)animated
{

  NSLog(@"%@", self.cellSelected);
}

它适用于第一个NSLog,但对于第二个(传递的数据),它返回:&#34; nil&#34; ...... :(

2 个答案:

答案 0 :(得分:0)

欢迎使用Stackoverflow:)

第二堂课:

 @property (nonatomic, readwrite, copy) NSString *cellSelected;

您需要使用readwrite指定要从外部书写的内容 而copy,以确保NSString的值被复制,而不是被引用,这可能会丢失(这部分在过去的一年中引起了我很多头痛:))

答案 1 :(得分:0)

你的代码没有意义,这里有几个问题:

  1. 你是如何呈现PhotoViewController的?您的代码没有显示它...如果您使用segue来呈现视图控制器,那么您将有两个实例。
  2. 您的PhotoViewController类显示@interface定义,但其中有一个已定义的方法,表明它是@implementation。您确定要发布正确的代码吗?
  3. 您应该使用复制而非强引用来处理不可变属性。
  4. 您不需要声明UICollectionViewController符合UICollectionViewDatasource协议,默认情况下会这样做。