我正在尝试使用XCode5,但大多数代码示例都是XCode5之前的版本。当然还有iOS7之前的版本。主要问题是故事板。很多人想知道如何在没有故事板的情况下构建SCode5 - 但我不知道如何将故事前代码移动到故事板代码。
例如。最优秀的书“iOS中的地理位置”Alasdair Allan,O'Reilly,2012,充满了几个版本前的代码。当然,当我在XCode5 / iOS7级别进入XCode时,我不知道他们在各个部分正在讨论什么。 我有一些示例代码工作的开始,但它现在正在抛出一个错误,我无法弄明白。我怀疑是因为它试图以Code4的方式进行,而我在XCode5中。
无论如何 - 什么是好的是指导一个变化的教程。 让我举个例子: 本书第一个例子的代码是这样的。
在本书的Project Navigator图像中,显示
LocationAppDelegate.h
LocationAppDelegate.m
LocationViewController.h
LocationViewController.
LocationViewController.xib
在我的显示器中,我有所有相同的文件,除外。我没有“.xib”文件,而是“Main.storyboard”
到目前为止确定 - 我从我所读过的内容中得知,Main.storyboard是xib文件的新等效项。 但是.h和.m文件中自动生成的代码有很多不同之处。所以尽我所能,我至少让位置服务在调试窗口中显示一个虚拟位置。
但是 - 现在我有这个错误。实际上有两个错误。
第一个是语义警告
LocationViewController.m:15:17: Method 'tableView:cellForRowAtIndexPath:' in protocol not implemented
第二个,红色错误!标记
LocationViewController.m:60:9: No visible @interface for 'UITableView' declares the selector 'dequeueReusableCellWithIndentifier:'
本书中出现的代码相当简单,但这个错误让我失望。
来自LocationViewController.m的代码
//
// LocationViewController.h
// Location
//
// Created by Robert Chalmers on 08/10/2013.
// Copyright (c) 2013 Robert Chalmers. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface LocationViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@end
来自LocationViewController.m的代码
//
// LocationViewController.m
// Location
//
// Created by Robert Chalmers on 08/10/2013.
// Copyright (c) 2013 Robert Chalmers. All rights reserved.
//
#import "LocationViewController.h"
@interface LocationViewController ()
@end
@implementation LocationViewController
@synthesize tableView = _tableView;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - View lifecycle
#pragma mark UITableViewDelegate Methods
- (void)tableView:(UITableView *)tv
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//add code here
}
#pragma mark UITableViewDataSource Methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tv {
return 1;
}
- (NSInteger) tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)section {
return 5;
}
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"cell";
UITableViewCell *cell =
//[tv dequeueReusableCellWithIndentifier:@"cell"];
[tv dequeueReusableCellWithIndentifier:@"cell"];
if (cell == nil ) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:identifier];
cell.accessoryType = UITableViewCellAccessoryNone;
return cell;
}
}
@end
以及它的价值,来自LocationAppDelegate.h的代码,后跟.m
//
// LocationAppDelegate.h
// Location
//
// Created by Robert Chalmers on 08/10/2013.
// Copyright (c) 2013 Robert Chalmers. All rights reserved.
//
#import <UIKit/UIKit.h>
@class viewController;
@interface LocationAppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) viewController *viewController;
@property (strong, nonatomic) CLLocationManager *locationManager;
@end
============
//
// LocationAppDelegate.m
// Location
//
// Created by Robert Chalmers on 08/10/2013.
// Copyright (c) 2013 Robert Chalmers. All rights reserved.
//
#import "LocationAppDelegate.h"
#import "LocationViewController.h"
@implementation LocationAppDelegate
@synthesize window = _window;
@synthesize viewController = _viewController;
@synthesize locationManager = _locationManager;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
if ([CLLocationManager locationServicesEnabled]) {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.distanceFilter = 1000;
[self.locationManager startUpdatingLocation];
}
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
- (void)applicationWillTerminate:(UIApplication *)application
{
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
NSLog(@"Location: %@", [newLocation description]);
}
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error {
NSLog(@"Error: %@", [error description]);
}
@end
当然,大多数情况下,我想知道这个错误是什么,但是如果对于现在的文件有什么指导方针呢?
感谢。
答案 0 :(得分:1)
我认为您应该查看this以修复xcode 5故事板错误。
关于错误,您应该尝试:
[tv dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
而不是:
[tv dequeueReusableCellWithIndentifier:@"cell"];
答案 1 :(得分:0)
在这里你可以找到答案 iOS7 storyboard in Xcode 5 keep growing vertically
在Xcode更改其故事板之前提交代码版本
点击故事板。 Xcode会询问您是否要升级。
选择始终升级
在这种情况下,故事板已被Xcode搞砸了。别 担心。关闭项目。
执行“git stash”并返回到步骤0中提交的版本 上述