iphone - 寻找关于将 Pre-Storyboard 代码 (XCode4) 移动到 Storyboard 代码 (XCode5) 的教程

标签 iphone ios objective-c uitableview

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?更新问题,使其成为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




我正在尝试掌握 XCode5,但大多数代码示例都是 XCode5 之前的。当然还有 iOS7 之前的版本。主要问题是 Storyboard。很多人想知道如何在没有 Storyboard 的情况下在 SCode5 中构建 - 但我不知道如何将预 Storyboard 代码移动到 Storyboard 代码。

例如。最优秀的书“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

以及它的值(value),来自 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

当然,大多数情况下,我想知道那个错误是什么,但如果有一些关于现在在哪些文件中的指导方针?

谢谢。

最佳答案

我想你应该看看 this修复 xcode 5 Storyboard错误。

关于错误,您应该尝试:

[tv dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

代替:
[tv dequeueReusableCellWithIndentifier:@"cell"];

关于iphone - 寻找关于将 Pre-Storyboard 代码 (XCode4) 移动到 Storyboard 代码 (XCode5) 的教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19268840/

相关文章:

iphone - 在 iPhone Development/Objective-C 中初始化实例变量

iphone - UILocalNotification 未在正确的时间调用

ios - 从 Unity 桥接到 Swift 时通知中心不调用

ios - 是否可以使UIView闪屏

objective-c - 在 Objective C 中将可变长度的 int 数组作为函数参数传递

iOS自定义UIView设计: init vs layoutSubviews

iphone - iOS https认证

ios - 在 IOS 中,我们可以在 UITableView 和 UITableView Cell 的背景中设置图像吗?

ios - 从 NSDictionary 中的 plist 获取数据

ios - 音译/转置 NSString 中的字符