0

tweetTitle という NSString を持つ NSObject クラスがあります。

TweetDesc.h ファイル

#import <Foundation/Foundation.h>

@interface TweetDesc : NSObject

@property (strong, nonatomic) NSString * tweetTitle;

-(void) setFullTweetTitle:(NSString *) fullTweetTitle;
@end

TweetDesc.m ファイル

@implementation TweetDesc
@synthesize tweetTitle;

-(void) setFullTweetTitle:(NSString *) fullTweetTitle
{
    self.tweetTitle = fullTweetTitle;
}
@end

FirstViewController、SecondViewController、ThirdViewController の 3 つのクラス (View Controller) があります。

FirstViewController FirstViewController.h のコードは次のとおりです。

@interface TweetViewController : UIViewController <UITextViewDelegate>
@property (strong, nonatomic) NSString * tweet;
@property (weak, nonatomic) IBOutlet UITextView *tvTweetTitle;
- (IBAction)btnCreateTweet:(id)sender;
@end

FirstViewController.m

@implementation TweetViewController
@synthesize tvTweetTitle, tweet;

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tvTweetTitle.delegate = self;
}

- (IBAction)btnCreateTweet:(id)sender
{
    tweet = [[NSString alloc]initWithFormat:@"%@", tvTweetTitle.text];

    TweetDesc * td = [[TweetDesc alloc]init];
    [td setFullTweetTitle:tweet];

    SecondViewController * svc = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
    [self.navigationController pushViewController:ivc animated:YES];
}

私の質問は次のとおりです。TweetDesc クラスの新しいインスタンスを作成せずに、2 番目と 3 番目の ViewController で tweetTitle を使用し、すべての ViewController で tweetTitle を再度設定するにはどうすればよいですか。

私が試した2番目のView Controllerで:

TweetDesc * td = [[TweetDesc alloc]init];
NSLog(@"%@", td.tweetTitle);

しかし、私はnullを取得します。それはすでにリリースされているか、何か他のものです。

事前に助けてくれてありがとう。

4

6 に答える 6

1

単一のプロパティのクラスを必要としない最初のことは、文字列のみを使用します。これにはいくつかの方法があります。

  • まず、ツイート プロパティをAppDelegateでグローバルに定義できます。
  • あるビューコントローラーから別のビューコントローラーに変数参照を渡すことができます。
  • または、 NSUserDefaultsを使用してテキストを設定および取得できます。

あなたの場合、最初のものの方が便利です。次のようにしてください

AppDelegate.h 内

プロパティを NSString *tweetText; として定義します。

今あなたの行動で

- (IBAction)btnCreateTweet:(id)sender
{
     AppDelegate *appDelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate];
     appDelegate.tweetText=tvTweetTitle.text;  
}

次に、値にアクセスするコントローラーで使用するだけです

AppDelegate *appDelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog("%@",appDelegate.tweetText);

値を設定するのと同じアプローチを NSUserDefaults に使用できます

[[NSUserDefaults standardUserDefaults] setObject:tvTweetTitle.text forKey:@"Tweet"];
[[NSUserDefaults standardUserDefaults] synchronize];

そして得るために

NSLog("%@",[[NSUserDefaults standardUserDefaults] valueForKey:@"Tweet"]);

他のコントローラーに移動する前に、必ず値を設定してください。

上記はあなたの目的を解決するはずです..

于 2013-04-02T08:40:50.460 に答える
0

これには AppDelegate を使用できます。

プロパティ@property(nonatomic, strong) TweetDesc * td;AppDelegate.hファイルで宣言します。

メソッドを次のように変更します。

- (IBAction)btnCreateTweet:(id)sender
{
    tweet = [[NSString alloc]initWithFormat:@"%@", tvTweetTitle.text];

    TweetDesc * td = [[TweetDesc alloc]init];
    [td setFullTweetTitle:tweet];
    [[[UIApplication sharedApplication] delegate] setTd:td];

    SecondViewController * svc = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
    [self.navigationController pushViewController:ivc animated:YES];
}

2 番目と 3 番目のビュー コントローラーでは、次を使用して値を取得できます。

TweetDesc *desc = [[[UIApplication sharedApplication] delegate] td];
NSLog(@"%@",desc.fullTweetTitle);
于 2013-04-02T08:40:12.933 に答える
0

デフォルトのタイトルを追加するメソッドを作成する場所を使用する必要がありcategoryます。または、常に 1 つのタイトルを保持TweetDescするシングルトンを作成することもできます。TweetDesc

于 2013-04-02T08:29:14.390 に答える
0

ViewControllerというメソッドを作成しますinitWithTweetDesc。メソッドは次のようになります。

- (id)initWithTweetDesc:(TweetDesc*)tweet
{
    self = [super init];
    if (self) {
        _tweet = tweet;
    }
    return self;
}

ここで、新しいビュー コントローラーに移動する場合は、次のコードを実行します。

TweetViewController *vc = [[TweetViewController alloc] initWithTweetDesc:tweetDesc];
[self.navigationController pushViewController:vc animated:YES];
于 2013-04-02T08:29:30.453 に答える