0

マスター詳細アプリケーションテンプレートのマスターから詳細ビューをプッシュしています。クリックされた行に応じて異なる情報を含む単一のビューをロードしたいと思います。plistファイルからデータをロードする予定です。追加したときにMasterViewControllerで使用したコードは次のとおりですdidSelectRowAtIndexPath:

DetailViewController *dvc = [[DetailViewController alloc]init];
dvc.rowItem = [_objects objectAtIndex:indexPath.row];;
NSLog(@"row is %i", indexPath.row);
NSLog(@"master %@", dvc.rowItem);

ここで、rowItemはにNSString属しDetailViewControllerます。viewDidLoad私が入れたの中DetailViewControllerに:

 [super viewDidLoad];
NSLog(@" thingy %@", rowItem);
[self setup:rowItem];

そしてsetupこのように見えます:

-(void) setup: (NSString *)eval {

filePath = [NSString stringWithFormat:@"%@.plist",eval];
NSLog(@"%@", filePath);
    NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

NSString *subName;
NSString *yesNo;
NSString *theseChanges;
subName = [plistDict objectForKey:@"subContractAddress"];
yesNo = [plistDict objectForKey:@"yesOrno"];
theseChanges = [plistDict objectForKey:@"Changes"];
}

これが私のインターフェースです:

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController

@property (strong, nonatomic) id detailItem;

@property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
@property (strong, nonatomic) IBOutlet UIButton *finishedButton;
@property (strong, nonatomic) IBOutlet UITextView *changes;
@property (strong, nonatomic) IBOutlet UIButton *saveButton;
@property (strong, nonatomic) IBOutlet UISwitch *test;
@property (strong, nonatomic) IBOutlet UILabel *finishedLabel;
@property (strong, nonatomic) IBOutlet UITextField *subContractName;
@property BOOL needsChanges;
@property (strong, nonatomic) NSString *rowItem;
-(IBAction)change:(id)sender;
-(IBAction)save:(id)sender;
@end

ビルドして実行すると、次のコンソール出力が得られます。

thingy (null)
(null).plist
row is 0
master Excavations

最初の行を押すと、

thingy (null)
(null).plist
row is 1
master Flooring

どういうわけか、rowItemはクロスオーバーでnullに設定されています。誰かが私がここで間違っていることを見ることができますか?

4

3 に答える 3

1

次のように2つのログステートメントを変更してみてください。

NSLog(@"master %@, detail %@", dvc.rowItem, dvc);

NSLog(@" thingy %@ in detail %@", rowItem, self);

作成した詳細dvcは、ViewController階層にあるオブジェクトと同じではないと思います。オブジェクトのアドレスを表示すると、それが答えかどうかを確認できます。

于 2012-07-18T17:34:42.613 に答える
0

「viewWillAppear」でセットアップを行うと、動作し始めると思います。

于 2012-07-18T17:27:42.600 に答える
0

これで確認してください、

dvc.rowItem = [[NString alloc]initWithString:@"%@",[_objects objectAtIndex:indexPath.row]];
于 2012-07-18T17:34:20.010 に答える