我正在尝试从班级NSString
中的班级PYTimelineViewController
中检索rippleMake
类型变量。
我在做什么:
在rippleMake.m
/* SET OBJECT */
PYTimelineViewController *getRippleForVideo = [[PYTimelineViewController alloc] init];
/* ESTABLISH THE RIPPLE IT VIDEO FOR CHALLENGE VIDEO */
NSString *videoFor = [getRippleForVideo getchallengeForVideo];
NSLog(@"%@",videoFor);
运行时,videoFor
会返回null
。
在PYTimelineViewController.h
@interface PYTimelineViewController : UITableViewController//<MWPhotoBrowserDelegate>
...
@property (nonatomic, strong) NSString *challengeForVideo;
-(NSString *)getchallengeForVideo;
- (void)setchallengeForVideo:(NSString*)challengeforVideo;
@end
在PYTimelineViewController.m
-(IBAction)openRippleIt:(id)sender
{
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
NSInteger rowOfTheCell = (indexPath.row + 1000); // ADD 1000 to get away from effecting other code
UIButton *button=(UIButton *)[self.view viewWithTag:rowOfTheCell];
NSString *btnTitle = [button currentTitle];
[self setchallengeForVideo:btnTitle];
NSLog(@"%@",[self getchallengeForVideo]); <--- This outputs exactly what I need.
[self performSegueWithIdentifier:@"moveTorippleIt" sender:self];
}
.m
getter和setter:
-(void) setchallengeForVideo:(NSString *)challengeforVideo
{
_challengeForVideo = challengeforVideo;
}
-(NSString *) getchallengeForVideo
{
return _challengeForVideo;
}
这很粗糙地将用户推向新的ViewController
,但这不应成为问题。
不确定为什么我无法检索该值,因为似乎所有内容都已正确配置。特别是我的吸气剂和制定者。
建议,想法?
答案 0 :(得分:2)
[[PYTimelineViewController alloc] init]
创建一个新的PYTimelineViewController并且不提供现有的。
Some code not executing in a method called from another ViewController
答案 1 :(得分:1)
其他一些评论......
如果您使用的是Xcode&gt; = 4.4,则不需要使用getter和setter。它们由编译器自动创建,以响应@property
。
惯用语目-C不使用&#34; get&#34;属性上的前缀。
&#34;复印&#34;通常是用于字符串的正确属性属性,因为它们可以是可变的。
您的标题应如下所示:
@interface PYTimelineViewController : UITableViewController
@property (nonatomic, copy) NSString *challengeForVideo;
@end
用法应如下所示:
PYTimelineViewController *vc = [[PYTimelineViewController alloc] init];
[vc setChallengeForVideo:@"some text"];
NSLog(@"%@", [vc challengeForVideo]);
对于奖励积分,请改用点语法:
PYTimelineViewController *vc = [[PYTimelineViewController alloc] init];
vc.challengeForVideo = @"some text";
NSLog(@"%@", vc.challengeForVideo);
答案 2 :(得分:1)
如果要从视图控制器中检索对象,只需将对象发送到您的类即可。
当您在PYTimelineViewController
中实例化rippleMake.m
时,这一个是全新的,因此您将丢失所需对象的引用。
此外,如果此时唯一的目标是检索var的值,则无需实现getter或setter 。
@property
键为您创建getter / setter。
通过在此处添加公共属性将对象传递到您的视图:
// RippleMake.h
// e.g
@property (strong, nonatomic) NSString *foo
在视图控制器中实例化类时,请务必传递属性:
// ViewController.m
// e.g
RippleMake *ripple = ....
ripple.foo = foo;
...
要将对象传递给另一个视图控制器,您必须执行相同的操作,但在prepareForSegue:sender
方法中,请参阅以下答案:https://stackoverflow.com/a/22867976/1745596