好吧,我正在把头发拉到这上面,这没有任何意义,所以它必须是一个错误,或者是我正在制造的一些极其愚蠢的错误。
以下是这种情况:我有一个带有xib文件的UIViewController。它有一个连接到view属性的UIView,一个连接到一个名为imageView的属性的UIImageView,以及一个连接到segmentControl的UISegmentedControl。
然而在我的代码中,我无法将图像分配给图像视图。当我NSLog对象时,我得到0x0的地址,所以它根本没有关联。我在Interface builder中设置了绑定,我重新启动了XCode并清理并构建了项目。没有什么工作,我浪费了一大笔时间试图弄清楚这一点。我还NSLoged segmentControl对象,并获得0x0。因此,XIB没有与代码挂钩,但是XIB本身正在加载,因为对象显示在屏幕上。
有没有人对我可能遗失的内容有任何想法?这是一件非常简单的事情,令人难以置信的是,它拒绝突然工作。
下面是下面的代码,在这种情况下,我正在访问projectId的setter中的对象,但我也尝试从另一个类访问imageView,它也不起作用(是的,我有@property声明和我尝试时合成for imageView。
DiagramViewController.h:
#import <UIKit/UIKit.h>
@interface DiagramViewController : UIViewController
{
NSUInteger projectId;
IBOutlet UIImageView *imageView;
IBOutlet UISegmentedControl *segmentControl;
}
@property NSUInteger projectId;
@end
DiagramViewController.m:
#import "DiagramViewController.h"
@implementation DiagramViewController
@synthesize projectId;
-(void)setProjectId:(NSUInteger)projId
{
NSLog(@"imageView: %@", imageView);
NSLog(@"segmentControl: %@", segmentControl);
projectId = projId;
NSString *filePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%i_schem", projectId] ofType:@"png" inDirectory:@"project-details/images/diagrams"];
NSData *imageData = [NSData dataWithContentsOfFile:filePath];
imageView.image = [UIImage imageWithData:imageData];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
return YES;
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
这是Interface Builder连接的图像:
答案 0 :(得分:3)
您需要确保在-viewDidLoad
方法中执行此操作,否则nib文件实际上没有取消归档对象,因此它们将设置为nil。特别是,您无法在-init
方法中访问笔尖中的项目。
但是,如果没有看到您的代码,很难说是否适合您。
编辑:好的,谢谢您发布代码。何时调用-setProjectId:
?你确定笔尖已经完成加载了吗?您的视图控制器中没有viewDidLoad
方法,因此您似乎无法随时检查此方法。
viewDidLoad中
在控制器的视图加载到内存后调用。
- (无效)viewDidLoad中
讨论
在视图控制器将其关联的视图加载到内存后调用此方法。无论视图是存储在nib文件中还是以编程方式在loadView方法中创建,都会调用此方法。此方法最常用于对从nib文件加载的视图执行其他初始化步骤。
答案 1 :(得分:0)
当您连接IBOutlets时听起来出了问题。
在IB中右键单击UISegmentedControl
并发布截图,以便我们可以看到您拥有的内容。如果你看到任何“黄色”,那么你可能已经找到了问题。