两个属性:
@property (retain, nonatomic) NSString *drinkType;
@property (retain, nonatomic) NSString *wheelType;
当从viewDidLoad作为self.drinkType等访问时,它们保持我期望的值。但是,从公共方法访问时
-(void)updateSentenceWithSelectedAromas:(NSMutableArray *)selectedAromas;
他们是空的。这里发生了什么?
“selectedAromas”数组从另一个控制器传递给此方法。
ViewController *aromaVC = [[ViewController alloc] init];
[aromaVC updateSentenceWithSelectedAromas:selectedAromas];
ViewController.h
-(void)updateSentenceWithSelectedAromas:(NSMutableArray *)selectedAromas;
@property (retain, nonatomic) NSString *drinkType;
@property (retain, nonatomic) NSString *wheelType;
ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
// This is working
NSLog(@"The drink type is:%@", self.drinkType);
}
-(void)updateSentenceWithSelectedAromas:(NSMutableArray *)selectedAromas {
// This returns null
NSLog(@"The drink type is:%@", self.drinkType);
}
答案 0 :(得分:0)
我认为你遗漏了很多东西,这让我觉得你在ObjectiveC中缺少对变量范围的一些基本理解,让我们看看这是否对你有所帮助:
首先,您的selectedAromas
数组与drinkType
和wheelType
没有任何关系。因此将此数组传递给ViewController似乎无关紧要。
其次,在您的ViewController中,您声明了自己的drinkType
和wheelType
变量,因此他们无法获得其他类或控制器的值。
答案 1 :(得分:0)
您可能不会很快设置您的属性(init将是一个好地方)。 viewDidLoad稍后会根据您发布的代码进行调用。
答案 2 :(得分:0)
好的,Michael Dautermann是绝对正确的。方法updateSentenceWithSelectedAromas
实际上是在视图控制器的单独实例中运行。为了解决这个问题,我用我的方法实现了一个协议监听器,并使用segue将子控制器的委托设置为它的父代。
感谢大家的帮助。
如果有人发现这件事,我就是这样做的:
ViewController2.h
@protocol updateSentenceProtocol <NSObject>
//Send Data Back To ViewController
-(void)updateSentenceWithSelectedAromas:(NSMutableArray *)selectedAromas;
@end
@interface ViewController2 : UIViewController
// delegate so we can pass data to previous controller
@property(nonatomic,assign)id delegate;
@end
ViewController2.m
@synthesize delegate;
-(void)someMethod {
[delegate updateSentenceWithSelectedAromas:selectedAromas];
}
ViewController.m
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"viewController2Segue"])
{
// Get reference to the destination view controller
ViewController2 *vc = [segue destinationViewController];
vc.delegate = self;
}
}
-(void)updateSentenceWithSelectedAromas:(NSMutableArray *)selectedAromas {
// do stuff with array and properties as needed
}