0

次のコードが機能しない理由を理解しようと、午後中ずっと髪を引っ張っています。私がやろうとしているのは、あるクラスから別のクラスに文字列を渡すことだけです。

私の FirstDetailViewController.h ファイルで、NSString を宣言します

@property(nonatomic, retain) NSString *infoForArray;

そして、Grinding01_DetailViewController.m で、文字列の値を設定しようとします

#import "Grinding01_DetailViewController.h"
#import "FirstDetailViewController.h"

@implementation Grinding01_DetailViewController


...

    NSString *didLoadMessage = @"Grinding01 Loaded";

    FirstDetailViewController *temp = [[FirstDetailViewController alloc] initWithNibName:@"FirstDetailView" bundle:nil];

    temp.infoForArray = didLoadMessage;

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

}

FirstDetailViewController.h から infoForArray を出力すると、null になります。

見逃している簡単なステップがあると思いますが、それが見えません。


編集: FirstDetailViewController のコードは次のとおりです。

FirstDetailViewController.h

#import <UIKit/UIKit.h>
#import "Protocols.h"

@interface FirstDetailViewController : UIViewController <SubstitutableDetailViewController> {

    //for the output
    IBOutlet UITextView *outputView;

    UIToolbar *navigationBar;

    NSMutableArray *logMessages;

}

@property (nonatomic, retain) IBOutlet UIToolbar *navigationBar;

//for incoming messages
@property(nonatomic, retain) NSString *infoForArray;


@end

FirstDetailViewController.m

#import "FirstDetailViewController.h"

@implementation FirstDetailViewController

@synthesize navigationBar, infoForArray;

-(void)viewDidLoad{

    [super viewDidLoad];

    //The log cannot be changed
    outputView.editable = NO;    

}


#pragma mark -
#pragma mark View lifecycle

- (void)viewDidUnload {

    [super viewDidUnload];

    self.navigationBar = nil;

}

-(void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:YES];

    NSLog(@"message: %@", infoForArray);

    outputView.text = infoForArray;

}

#pragma mark -
#pragma mark Managing the popover

- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem {

    // Add the popover button to the toolbar.
    NSMutableArray *itemsArray = [navigationBar.items mutableCopy];
    [itemsArray insertObject:barButtonItem atIndex:0];
    [navigationBar setItems:itemsArray animated:NO];
    [itemsArray release];
}


- (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem {

    // Remove the popover button from the toolbar.
    NSMutableArray *itemsArray = [navigationBar.items mutableCopy];
    [itemsArray removeObject:barButtonItem];
    [navigationBar setItems:itemsArray animated:NO];
    [itemsArray release];
}


#pragma mark -
#pragma mark Rotation support

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}


#pragma mark -
#pragma mark Memory management

- (void)dealloc {
    [navigationBar release];
    [super dealloc];
}   


@end
4

2 に答える 2

0

問題のある領域は FirstDetailViewController にあるようです。何が起こっているのかを確認できるように、そのコードを投稿することをお勧めします。

于 2012-07-10T23:21:49.857 に答える
0

私の推測では、設定する前に発生する FirstDetailViewController のインスタンス化プロセスのどこかで infoForArray をチェックしていると思いますtemp.infoForArray = didLoadMessage

参考までに、チェックインinfoForArrayするviewDidLoadと早すぎます。viewDidLoadビューがメモリに入れられるとトリガーされます。あなたが望むものはviewDidAppear、あなた自身が追加しなければならないかもしれません

于 2012-07-10T22:43:38.407 に答える