我正在开发一个非常小的(一个视图)iPhone应用程序(Xcode 3.2.3上的iOS 4.0.2),我认为我错过了如何在IB中建立IBOutlet和IBAction连接。我希望你们中的一个(或几个)善良的人会愿意连接到我的Dropbox并点击该项目并给我一个关于我搞砸的地方的提示?
我已经在这方面工作了几天(大约三天一小时)并且还没有找到我的错误....
::叹息::
有人为此比赛吗?如果您是以下链接:http://dl.dropbox.com/u/5271440/picChoice.zip
关于APP:
运行时,这个应用程序应该在模拟器上抛出一个窗口,其中包含一个UIImageView,UILabel和一个UISegmentedControl。 UIImageView应显示默认图像,UILabel应显示默认字符串,当UISegmentedControl上触摸任何段时,图像和标签应相应更改。
我有一段时间在模拟器上工作了,但是当我把它加载到我的iPhone上时,我发现了一堆乱码(糟糕的数组初始化和指针问题。我正在学习....)
看似“修复”崩溃错误后,我似乎已经破坏了我的连接,再也没有正常运行....
真诚地感谢任何和所有的帮助!
亲切的问候,
史蒂夫奥沙利文答案 0 :(得分:1)
除了没有显示的视图外,您还有更多问题。一旦你按照约翰的回答,你仍然得到一个标签,上面写着“标签”和一个不会影响任何东西的分段控件。为了使初始外观正确,您必须首先删除三行代码:
txtLabel = [[UILabel alloc] init];
imageView = [[UIImageView alloc] init];
seg = [[UISegmentedControl alloc] init];
运行时会为您处理这些问题。一旦删除它们,您就可以获得标签上的快乐面孔和正确的文字。此时,如果选择片段,则会显示空白图像和文本。现在你应该进行更改到目前为止在你的-(IBAction)segmentedControlValueChanged
方法中添加一个断点,然后进行构建和调试。单击一个段然后查看self下的调试器,注意imageArray
和txtArray
都有0个对象。要解决此问题,您需要进行一些更改。由于您在创建后没有对任何一个数组进行任何更改,因此可以将它们设为常规NSArray
并将它们声明为属性(不要忘记@synthesize
)。为了将现有代码的重写保持在最低限度,您的viewDidLoad
应如下所示:
- (void)viewDidLoad
{
// txtLabel = [[UILabel alloc] init];
// imageView = [[UIImageView alloc] init];
// seg = [[UISegmentedControl alloc] init];
NSMutableArray *anArray = [[NSMutableArray alloc] init];
[anArray addObject:[UIImage imageNamed:@"jupiter2.JPG"]];
[anArray addObject:[UIImage imageNamed:@"waffles?.JPG"]];
[anArray addObject:[UIImage imageNamed:@"enterprise.JPG"]];
[anArray addObject:[UIImage imageNamed:@"wrunning.JPG"]];
[anArray addObject:[UIImage imageNamed:@"ApolloCSM.JPG"]];
self.imageArray = [anArray copy];
[anArray removeAllObjects];
NSString *myStr = [[NSString alloc] initWithString:@"Jupiter II"];
[anArray addObject: myStr];
[myStr release];
myStr = [[NSString alloc] initWithString:@"Could this be OUR Waffles?"];
[anArray addObject: myStr];
[myStr release];
myStr = [[NSString alloc] initWithString:@"USS Enterprise NCC-1701"];
[anArray addObject: myStr];
[myStr release];
myStr = [[NSString alloc] initWithString:@"A Woman Running"];
[anArray addObject: myStr];
[myStr release];
myStr = [[NSString alloc] initWithString:@"Apollo Command and Service Modules"];
[anArray addObject: myStr];
[myStr release];
self.txtArray = [anArray copy];
[anArray release];
imageView.image = [UIImage imageNamed:@"happy-face.JPG"];
txtLabel.text = @"Hi there!";
[imageView release];
[super viewDidLoad];
}
您还可以使用NSArray
方法arrayWithObjects:
缩短方法,并在此过程中分配更少的对象。
答案 1 :(得分:0)
我已经下载了它。
您已打开IB,在文档区域中可以右键单击视图,将“新建引用插座”连接到文件所有者,当您将其放在那里时,它将为您提供查看选项。
这有时会发生,如果不起作用,所有事情都会破裂。
别忘了将问题标记为已接受的答案(谢谢)。
约翰。