“[[UIScreen mainScreen] bounds]”返回null?

时间:2010-10-13 15:23:30

标签: iphone objective-c bounds

当我尝试使用[[UIScreen mainScreen] bounds]获取主屏幕的边界时,它返回null。我也试过[[UIScreen applicationFrame] bounds],仍然返回null。

奇怪的是;如果我做NSLog(@"%@", [UIScreen mainScreen]);它打印出正确的边界,虽然我不知道如何解析它,如果它甚至可能。

以下是相关代码:

-(void)loadView {
    [super loadView];
    CGRect pagingFrame = [[UIScreen mainScreen] bounds]; 
    NSLog(@"%@", [[UIScreen mainScreen] bounds]); //prints null for me
    NSLog(@"Width of original frame = %d", pagingFrame.size.width); //prints out 0
    pagingFrame.origin.x -= pagingXOrigin;
    pagingFrame.size.width += pagingWidthAdd;
    NSLog(@"Width of adjusted frame = %d", pagingFrame.size.width); //still prints out 0
    pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingFrame];
    pagingScrollView.pagingEnabled = YES;
    pagingScrollView.backgroundColor = [UIColor blackColor];
    pagingScrollView.contentSize = CGSizeMake(pagingFrame.size.width * [self imageCount], pagingFrame.size.height);
    self.view = pagingScrollView;
    //Initialize sets
    recycled = [[NSMutableSet alloc] init];
    visible = [[NSMutableSet alloc] init];
    [self tilePages];
}

pagingScrollView在头文件中声明,并且是可循环使用的。

我正在使用Xcode 3和iOS SDK 4.1。

我确信这有一个非常简单的解决方案,但是我仍然是Objective-C的新手,因此我无法解决它。

由于

3 个答案:

答案 0 :(得分:17)

NSStringFromCGRect方法可以更快速地记录CGRect。有关详细信息,请参阅Apple's documentation,但这是一段代码:

CGRect screenBounds = [[UIScreen mainScreen] bounds];
NSLog(@"%@", NSStringFromCGRect(screenBounds));

答案 1 :(得分:9)

boundsstruct,不是对象。您无法使用%@格式说明符输出它。同样,结构的成员是浮点数,而不是整数。如果使用%d输出它们,则必然会得到错误的结果。

答案 2 :(得分:1)

为了进一步解释一下,“%@”通过在对象上调用[obj description]并使用从中返回的字符串来格式化NSObjects。因此,在尝试使用%@格式化字符串之前,请确保您实际上正在处理NSObject而不是其他类型。