我正在尝试在UIViewControllers
之间传递一个整数值,新增到iOS并遇到问题。
在设置值的UIViewController
中,没有问题。但是在设置值后NSLog
显示第二个UIViewController
中的值为空。
我的应用将使用水平滑块来确定UIImage animationDuration
中不同UIViewController
之间的时间长度。
此方法正确地从水平滑块接收值。我初始化了"其他"的一个实例。 UIViewController
,imageview.somedata
属于另一个视图控制器。我知道由于下面的NSLogs
,正确传递了值。
- (IBAction) changeButtonPressed:(id)sender {
imageView = [[GTImageView alloc] initWithNibName:@"GTImageView" bundle:nil];
NSLog(@"text value = %@", myTextField);
NSString *textValue = [myTextField text];
int value = [textValue floatValue];
if (value < 0) value = 0;
if (value > 100) value = 100;
mySlider.value = value;
sliderValue = &value;
NSLog(@"sliderValue = %d", *(sliderValue));
myTextField.text = [NSString stringWithFormat:@"%.1d", value];
if ([myTextField canResignFirstResponder]) [myTextField resignFirstResponder];
imageView.someData = *(sliderValue);
NSLog(@"imageView.someData = %d", imageView.someData);
}
这是该实施文件的顶部
#import "GTSettingsVC.h"
#import "GTImageView.h"
#import "GTImageView.m"
@interface GTSettingsVC ()
@end
@implementation GTSettingsVC
@synthesize mySlider, myTextField;
@synthesize sliderValue;
该头文件
#import "GTImageView.h"
@interface GTSettingsVC : UIViewController
{
IBOutlet UISlider *mySlider;
IBOutlet UITextField *myTextField;
GTImageView *imageView;
int *sliderValue;
}
@property (nonatomic) int *sliderValue;
我正在尝试将数据发送到
的视图控制器的头文件 #import <UIKit/UIKit.h>
@interface GTImageView : UIViewController
{
UIScrollView* scrollView;
UIPageControl* pageControl;
int *someData;
}
@property (nonatomic) int *someData;
我希望变量someData具有我在第一个控制器中给出的值的实现文件。 NSLog在此实现中返回null。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
UIImageView *animatedImageView =
[[UIImageView alloc] i nitWithFrame:CGRectMake(0, 55, 400, 550)];
[self.view addSubview:animatedImageView];
animatedImageView.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"IMG_0052.JPG"],
[UIImage imageNamed:@"IMG_0054.JPG"],
[UIImage imageNamed:@"IMG_0081.JPG"],
nil];
NSLog(@"some data = %@", someData);
// NSLog is returning null
int x = someData;
animatedImageView.animationDuration =
x * [animatedImageView.animationImages count];
[animatedImageView startAnimating];
[self.view addSubview: animatedImageView];
}
答案 0 :(得分:1)
没有必要采取int *。将其替换为int并直接赋值而不是地址。
答案 1 :(得分:1)
我相信您还没有掌握查看控制器生命周期以及模型视图控制器(MVC)的概念/理念。
您在第一个视图控制器( GTSettingsVC )的 changeButtonPressed 中定义和启动的 GTImageView 是 GTSettingsVC 即可。如果视图控制器从 GTSettingsVC 转换为 GTImageView ,则数据将不会传递到那里。
由于您使用的是UINavigationController
,我相信您拥有Segue
。传递UINavigationController
数据的最简单方法是使用prepareForSegue
。在转换到此方法之前,您必须准备要传递给第二个视图控制器的数据。
你也在 GTImageView 中犯了一些错误。 someData 不是对象,不应该 * 。并尝试不使用变量,仅使用属性。它应该是: -
@property (nonatomic) int someData;
在 GTSettingsVC.M 中,添加以下功能: -
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
GTImageView * viewController = segue.destinationViewController;
viewController.someData = 99;
}
在 GTImageView.H
中@interface GTImageView : UIViewController
{
UIScrollView* scrollView;
UIPageControl* pageControl;
}
@property (nonatomic) int someData;
@end
GTImageView.M
中的 viewDidLoad- (void)viewDidLoad
{
[super viewDidLoad];
UIImageView *animatedImageView =
[[UIImageView alloc] initWithFrame:CGRectMake(0,55, 400, 550)];
[self.view addSubview:animatedImageView];
animatedImageView.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"IMG_0052.JPG"],
[UIImage imageNamed:@"IMG_0054.JPG"],
[UIImage imageNamed:@"IMG_0081.JPG"],
nil];
NSLog(@"some data = %d", self.someData);
int x = self.someData;
animatedImageView.animationDuration =
x * [animatedImageView.animationImages count];
[animatedImageView startAnimating];
[self.view addSubview: animatedImageView];
}
我向Github添加了一个示例项目供您参考: - https://github.com/voyage11/PassingDataTest