指向整数转换的不兼容指针将viewcontroller *发送到BOOL类型的参数

时间:2012-04-20 12:21:52

标签: objective-c ios5 xcode4.2

我试图找出如何读取存储在Web服务器上的文本文件并在文本视图中显示内容。我已经关注了Apple网站NSURLConnection中有关如何建立NSURLConnection和receiveData以及显示接收数据的文档。

我创建了一个按钮,我想在按钮点击时加载文本视图。为此,我写了这个方法

- (void)loadWeb:(BOOL)animated
{
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://nowayweb.com/mytext.txt"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];

    NSURLConnection *myConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if (myConnection) {
        downloadedData = [[NSMutableData data] retain];
    }
    else{

        NSLog(@"Error");
    }
}

但我在.m文件中收到警告,可以在屏幕截图中看到,如下所示: Warning Screenshot

它工作正常,我可以在文本视图中查看文本,但我想知道我在哪里犯了错误。如果有人对此有所了解,那将会有所帮助。

或者是否有更好的方法通过按钮点击从Web加载内容。任何帮助表示赞赏。

由于

2 个答案:

答案 0 :(得分:0)

ObjC的BOOL不是真正的布尔类型。它是signed char的typedef。

该方法的签名是:

- (void)loadWeb:(BOOL)animated

表达式[self loadWeb:self];没有意义,并且它不是真正的bool转换。编译器警告您正在将指针转换为signed char

它应该是:

[self loadWeb:YES];

-OR -

[self loadWeb:NO];

-OR -

BOOL someBOOLVariableOrParameter = ...; // YES or NO
[self loadWeb:someBOOLVariableOrParameter];

答案 1 :(得分:0)

self是指向对象的指针,而不是BOOL值。你应该这样做:

[self loadWeb: YES];

除了你的方法似乎没有使用参数,所以你不妨摆脱它。

[self loadWeb];

- (void)loadWeb
{
    // all the stuff inside
}

它对你起作用的原因是a)你没有使用参数,b)编译器会自动将self转换为BOOL,方法是砍掉除指针之外的所有字节。如果你一直在使用这个参数,那么大部分时间它都是YES偶然的,偶尔也会NO