我有一个包含两个NSString数据成员的类
标头文件
@interface WebSiteFavorites : NSObject
@property (strong, nonatomic) NSString *titleName;
@property (strong, nonatomic) NSString *url;`
- (id) initWithTitleName: (NSString *)titleName url: (NSString *)url;
@end
我有一个TVC使用这个类作为它的数据源,我在appDelegate中硬编码了我的类的一些实例来填充有效的电视。从电视我有一个添加按钮与模态转换到VC。在这个视图控制器中我有两个文本字段,用户输入一个名称和一个网址,然后我使用协议和委托更新TVC(我不太明白)。我的问题是,在文本字段中输入所需信息后,我的类实例为空。
这是我的代码
标题 @interface WebSiteFavoritesAddFavoritesViewController: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方法之后,我使用了断点,收藏夹为空。 我还有一些关于协议和代表的问题只是为了理解。我为我的协议创建了一个单独的头文件,我的TVC符合协议,在我的VC中我创建了代理,你可以在我发布的代码中看到。在我的TVC中,我已经实现了我的协议功能。这是正确的顺序吗?
答案 0 :(得分:1)
您必须实例化favorites
。如果没有实例化对象,则不会保留您为其分配的值。
所以你必须做......
favorites=[[WebSiteFavorites alloc] init];
或者你有另一种方法initWithTitleName:url:
,请使用它来实例化。
希望这有帮助!