0

2つのNSStringデータメンバーを持つクラスがあります

ヘッダーファイル

@interface WebSiteFavorites : NSObject

@property (strong, nonatomic) NSString *titleName;
@property (strong, nonatomic) NSString *url;`

- (id) initWithTitleName: (NSString *)titleName url: (NSString *)url;

@end

このクラスをデータソースとして使用するTVCがあり、appDelegateでクラスのいくつかのインスタンスをハードコーディングして、機能するTVにデータを入力しました。テレビから、VCへのモーダルトランジションを備えた追加ボタンがあります。このViewControllerには、ユーザーが名前とURLを入力し、プロトコルとデリゲートを使用してTVCを更新する2つのテキストフィールドがあります(これはよくわかりません)。私の問題は、テキストフィールドに必要な情報を入力した後、クラスインスタンスがnullになることです。

これが私のコードです

ヘッダー@interfaceWebSiteFavoritesAddFavoritesViewController:UIViewController

@property (strong, nonatomic) WebSiteFavorites *favorites;

@property (weak, nonatomic) IBOutlet UITextField *titleTextField;
@property (weak, nonatomic) IBOutlet UITextField *urlTextField;

@property (strong) id<WebSiteFavoritesDelegate> delegate;

- (IBAction)titleTextFieldChanged;
- (IBAction)urlTextFieldChanged;

- (IBAction)doneButtonTapped:(id)sender;
- (IBAction)cancelButtonTapped:(id)sender;

@end

実装

@implementation WebSiteFavoritesAddFavoritesViewController

@synthesize favorites = _favorites;
@synthesize urlTextField = _urlTextField;
@synthesize titleTextField = _titleTextField;


- (IBAction)titleTextFieldChanged
{
    self.favorites.titleName = self.titleTextField.text;

}

- (IBAction)urlTextFieldChanged
{
   self.favorites.url = self.urlTextField.text;

}

- (IBAction)doneButtonTapped:(id)sender
{  
    [self.delegate newFavoriteAdded:self.favorites];
    [self dismissModalViewControllerAnimated:YES];
}

- (IBAction)cancelButtonTapped:(id)sender
{
    [self dismissModalViewControllerAnimated:YES];
}

#pragma mark UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
@end

IBActionメソッドの後、ブレークポイントを使用しましたが、お気に入りはnullです。また、理解のためにプロトコルとデリゲートについていくつか質問があります。プロトコル用に別のヘッダーファイルを作成しました。TVCはプロトコルに準拠しています。VCでは、投稿されたコードで確認できるデリゲートを作成しました。私のTVCでは、プロトコルから機能を実装しました。これは適切なシーケンスですか?

4

1 に答える 1

1

インスタンス化する必要がありますfavorites。オブジェクトをインスタンス化しないと、割り当てた値を保持できません。

だからあなたはしなければならない...

favorites=[[WebSiteFavorites alloc] init];

または、別の方法initWithTitleName:url:があるので、それを使用してインスタンス化します。

お役に立てれば!

于 2012-12-14T19:34:15.893 に答える