0

私はフランス人なので、下手な英語で申し訳ありません...

データを渡したい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;

}

そして2番目のクラス:

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

@property (nonatomic, strong) NSString *cellSelected;

- (void)viewWillAppear:(BOOL)animated
{

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

最初の NSLog では正しいのですが、2 番目 (渡されたデータ) では次のように返されます: "nil" ... :(

4

2 に答える 2

0

あなたのコードは意味がありません。ここにはいくつかの問題があります:

  1. PhotoViewController をどのように提示していますか? あなたのコードはそれを表示しません...セグエを使用してView Controllerを表示している場合、それの2つのインスタンスがあります。
  2. あなたの PhotoViewController クラスは @interface 定義を示していますが、 @implementation であることを示唆する定義済みのメソッドが含まれています。正しいコードを投稿していますか?
  3. 可変でないプロパティには、強い参照ではなくコピーを使用する必要があります。
  4. UICollectionViewController を UICollectionViewDatasource プロトコルに準拠していると宣言する必要はありません。これはデフォルトで行われます。
于 2014-06-09T16:37:25.497 に答える
0

Stackoverflow へようこそ :)

2 番目のクラスの場合:

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

を使用して、外部から書き込むことを意図していることを指定する必要がありますreadwrite
そして、copyの値NSStringがコピーされ、参照されていないことを確認するため、失われる可能性があります(この部分は、昨年私に多くの頭痛の種を引き起こしました:))

于 2014-06-09T16:35:55.860 に答える