使用故事板

时间:2015-05-15 13:05:55

标签: ios objective-c xcode nsarray

我正在尝试使用来自ray的故事板的教程。我正在使用一个标签栏控制器连接嵌入导航控制器的tableview,这个表视图被命名为播放器和连接标签栏控制器的视图控制器,命名为手势。通过将这些细节存储在对象中,在玩家桌面视图中显示玩家游戏,名称和等级。所以我创建了一个带有基础对象的新文件播放器,将它们存储为属性,现在我必须将这些属性存储在视图控制器的数组中,称为播放器视图控制器,然后我必须在应用程序中创建数组和一些测试播放器对象委托然后使用实例变量将其分配给PlayersViewController的players属性。在AppDelegate.m中,我导入了播放器和播放器视图controller.h标头,并添加了一个名为_players的新实例变量。所以我在app delegate.m中的代码如下所示错误是下标需要大小的界面' NSARRAY'这在行视图控制器[0]的非脆弱ABI中不是常数。

#import "AppDelegate.h"
#import "Player view controller.h"
#import "player.h"

@implementation AppDelegate {
   NSMutableArray *_players; }

@synthesize window = _window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   _players=[NSMutableArray arrayWithCapacity:20];
   player *player1=[[player alloc]init];
   player1.name=@"name";
   player1.game=@"cricket";
   player1.rating=3;
   [_players addObject:player1];
   player1=[[player alloc]init];
   player1.name=@"name";
   player1.game=@"football";
   player1.rating=3.5;
   [_players addObject:player1];
   player1=[[player alloc]init];
   player1.name=@"tony";
   player1.game=@"handball";
   player1.rating=4;
   [_players addObject:player1];
   UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
   UINavigationController *navigationController = [tabBarController viewControllers][0];
   UINavigationController *navigationController = [tabBarController viewControllers][0]; /*at this point i get a error as  [error: subscript requires size of interface 'NS ARRAY' which is not constant in non-fragile ABI] */
   Player view controller *playersViewController = [navigationController viewControllers][0];  
   playersViewController.players = _players;

   return YES;

3 个答案:

答案 0 :(得分:2)

使用下标语法(即1 10)需要在iOS 6 SDK中引入的Objective-C功能,但是afaik Xcode 4.2仅支持iOS 5,因此您必须使用旧语法:

someArray[0]

...或更新到更新版本的Xcode(据我所知,您甚至无法使用Xcode 4.2提交到App Store。)

答案 1 :(得分:1)

如果您只是想获取数组的第一个对象,为什么不使用firstObject?

UINavigationController *navigationController = [[tabBarController viewControllers] firstObject];

答案 2 :(得分:0)

您可以使用以下代码

UINavigationController *navigationController = 
    [tabBarController.viewControllers objectAtIndex:0];

请参阅以下链接。注意错误和解释..!

What is a non-fragile ABI?

Subscript requires size of interface 'NSArray', which is not constant in non-stable ABI

希望它可以帮助你......!