1

我习惯于从故事板文件或 xib 文件加载 ViewControllers,所以当我第一次尝试在代码中加载一个时:

UIStoryboard *storyboard = self.storyboard;

ProfileViewController *profViewController = [storyboard instantiateViewControllerWithIdentifier:@"ProfileView"];

NSLog(@"Self View Frame: %@", NSStringFromCGSize(self.view.frame.size));
NSLog(@"ProfViewCont Frame: %@", NSStringFromCGSize(profViewController.view.frame.size));

我收到以下错误:

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[NSPlaceholderMutableString initWithString:]: nil argument”

假设我的故事板 xib 正确加载,我需要做些什么不同的事情?这是 viewDidLoad:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // add subviews

    self.view.backgroundColor = [UIColor clearColor];
    self.view.opaque = YES;

    [UIView beginAnimations:nil context:nil];
    [self.view setFrame:CGRectMake(0, 480, 320, 480)];

    [UIView setAnimationDuration:0.75f];
    [self.view setFrame:CGRectMake(0, 0, 320, 480)];
    [UIView commitAnimations];

    // Sort stat bars top to bottom (HP == 0):
    statBars = [statBars
                sortedArrayUsingComparator:^NSComparisonResult(id label1, id label2)
                {
                    if ([label1 frame].origin.y < [label2 frame].origin.y)
                        return NSOrderedAscending;
                    else
                        return NSOrderedDescending;
                }];

    // Sort types left to right:
    types = [types
             sortedArrayUsingComparator:^NSComparisonResult(id label1, id label2)
             {
                 if ([label1 frame].origin.x < [label2 frame].origin.x)
                     return NSOrderedAscending;
                 else
                     return NSOrderedDescending;
             }];

    [self displayInfo:currentIndex];
}

谢谢你的帮助!

4

2 回答 2

1

没关系,事实证明错误出现在 ViewDidLoad 的最后一行 [self displayInfo:currentIndex] 中。我错误地认为 viewDidLoad 是在实例化 ViewController 时安全调用的。当我调用 self.view 时,它会被调用很久。

<_< 延迟初始化,对吧?

于 2013-10-22T08:07:15.100 回答
0

检查您的ProfileViewControllerxib ,您一定是连接了错误的插座到文件所有者

于 2013-10-22T08:00:52.393 回答