更新 0
暂且不回答这个问题。
我想我已经找到了问题的一部分。
当我尝试将它创建的自动生成的 .xib 文件重命名_
为 use时,XCode 再次中止~
。Xcode 在中止时似乎至少破坏了一个 .xib 文件,并且该文件包含应用程序所需的最小视图或窗口对象。尽管丢失的 .xib 文件已从 Finder 中消失,但它仍显示在导航器中。
所以现在,我将不理会这些_
文件,然后再试一次,但不要使用我之前得到的建议。
更新 0
按照此处的建议更改了以下代码,我的 xib 遇到了问题。 我怀疑问题来自将 xib 名称更改为使用 '~' 而不是 '_' 并且无法修改引用 xib 名称的相应代码。
问题也可能是我有以下 4 个文件名,这可能会让 Xcode 感到困惑?
BSViewController.h/.m
BSViewController~iPhone.xib
BSViewController~iPad.xib
原始代码是.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[BSViewController alloc] initWithNibName:@"BSViewController_iPhone" bundle:nil];
} else {
self.viewController = [[BSViewController alloc] initWithNibName:@"BSViewController_iPad" bundle:nil];
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
修改后的代码(包括额外的)是.
#import "BSAppDelegate.h"
#import "BSViewController.h"
@implementation BSAppDelegate
@synthesize window;
@synthesize viewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[BSViewController alloc] initWithNibName:@"BSViewController" bundle:nil];
[self.window addSubview:viewController.view];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
BSAppDelegate.h 紧随其后。
#import <UIKit/UIKit.h>
@class BSApp;
@class BSViewController;
@interface BSAppDelegate : NSObject <UIApplicationDelegate>{
UIWindow *window;
BSViewController *viewController;
}
@property (retain, nonatomic) IBOutlet UIWindow *window;
@property (retain, nonatomic) IBOutlet BSViewController *viewController;
@end
BSViewController.h 紧随其后。
#import <UIKit/UIKit.h>
@interface BSViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
UIImage *workingImage;
IBOutlet UIImageView *imageView;
}
@property (nonatomic, retain) UIImage *workingImage;
@property (nonatomic, retain) IBOutlet UIImageView *imageView;
+ (BOOL)isCameraDeviceAvailable;
- (IBAction) chooseImage:(id) sender;
- (IBAction) grayscale:(id) sender;
@end
BSViewController.m 紧随其后。
#import "BSViewController.h"
@interface BSViewController ()
@end
@implementation BSViewController
@synthesize imageView;
@synthesize workingImage;
+(BOOL)isCameraDeviceAvailable
{
BOOL isCameraAvailable=NO;
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
if([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront] )
isCameraAvailable = YES;
}
return isCameraAvailable;
}
- (IBAction) chooseImage:(id) sender {
[self.view addSubview: self.imageView];
UIImage* testCard = [UIImage imageNamed:@"ipad 7D.JPG"];
CGImageRef num = CGImageCreateWithImageInRect([testCard CGImage],CGRectMake(532, 0, 104, 104));
UIGraphicsBeginImageContext(CGSizeMake( 250,650));
CGContextRef con = UIGraphicsGetCurrentContext();
CGContextDrawImage(con, CGRectMake(0, 0, 13, 13) ,num);
UIImage* im = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRelease(num);
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
self.workingImage = [info objectForKey:UIImagePickerControllerOriginalImage];
[imageView setImage:self.workingImage];
[picker dismissViewControllerAnimated:YES completion:nil];
}
- (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 {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
self.imageView = nil;
}
- (void)dealloc {
[workingImage release];
[imageView release];
[super dealloc];
}
@end
我正在使用 Xcode 4.5.2 并为 iOS 6 设计。
在我的BSViewController~iPad.xib
中,我添加了一个“ViewController”对象,单击该对象会产生 2 个 Outlets:“searchDisplayController”和“view”。没有“视图”顶级对象;当我尝试将“+”拖到“文件所有者”时,我没有得到任何结果,可能也不应该得到结果。
在我的BSViewController~iPhone.xib
我已经有一个“窗口”对象,不知道这是否好或需要添加到〜iPad.xib(但我不知道如何)。