【问题标题】:Xcode 5 : passing data between UITableViewController and UICollectionViewController without SegueXcode 5:在 UITableViewController 和 UICollectionViewController 之间传递数据,无需 Segue
【发布时间】:2014-07-30 05:44:12
【问题描述】:

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

我想传递数据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 是正确的,但是对于第二个(传递的数据),它返回:“nil” ... :(

【问题讨论】:

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


    【解决方案1】:

    欢迎来到 Stackoverflow :)

    第二课:

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

    您需要使用readwrite 指定它打算从外部写入。
    还有copy,确保NSString的值被复制,而不是被引用,这可能会丢失(这部分在过去的一年里让我很头疼:))

    【讨论】:

    • 您好,感谢您的回复! :) 但我添加了:“@property (nonatomic, readwrite, copy) NSString *cellSelected;”在 PhotoViewController.h (第二类)中,再次返回 nil :(
    • 值得商榷,因为正如我所说,默认情况下它是读写的。它肯定不会导致问题。
    • @Viny76 因为没有segue,所以永远不会显示ViewController,甚至不应该调用viewWillAppear。对于当前调试,请尝试将 (void)viewWillAppear:(BOOL)animated 替换为 (void)viewDidLoad
    • @thedp 同样适用于 viewDidLoad :(
    【解决方案2】:

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

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

    【讨论】:

    • 他不必为它做他想做的事情。
    • 我知道,但我不知道他是如何呈现它的,因为他的代码没有显示它。我只是指出,如果他使用 segue 来呈现它,那么这将解释这个问题。
    • NSLogviewWillAppear... 如果没有segue,它甚至会被调用吗?
    • 这就是为什么我想知道他是如何呈现它的。如果他正在推送或展示他初始化的 PhotoViewController 实例,那么这应该可以工作,但由于代码不存在,我假设他可能正在处理他正在初始化视图控制器的不同实例的情况,那么什么得到呈现。
    • 那你能解释一下PhotoViewController的接口问题吗?它看起来像一个实现文件,一直到 PhotoViewController.h 文件的#import。您确定要在 PhotoViewController 的公共标头中声明该属性吗?如果您从外部类设置类扩展,则不能使用类扩展(您可以直接使用 KVC,但这不是您正在做的)。
    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多