Ошибка: пустое значение не игнорируется, как должно быть- Objective C

#objective-c

#objective-c

Вопрос:

 threadss.h
-----------
#import <Foundation/Foundation.h>

@interface threadss : NSObject {

    BOOL m_bRunThread;
    int a,b,c;

}
-(void)startThread;
-(void)insert;
-(void)display;
@end


threadss.m
------------

import "threadss.h"

@implementation threadss
-(void)startThread
{
    m_bRunThread = YES;
    NSOperationQueue* queue = [[NSOperationQueue alloc]init];
    //NSInvocationOperation* operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(display) object:nil];
    //[queue addOperation:operation];
    [[self insert] performSelectorOnMainThread:@selector(display) withObject:nil waitUntilDone:YES];
    [queue release];
    //[operation release];
}
-(void)insert
{
    NSLog(@"Into The Insert Event!!");
    a=10;
    b=20;
    c = a   b;
}
-(void)display
{
    NSLog(@"Into the display method");
    NSLog(@"The value od c is:%d",c);
}
@end

main.m
-------
#import <Foundation/Foundation.h>
#import "threadss.h"

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    threadss* thread = [[threadss alloc]init];
    [thread startThread];

    [pool drain];
    return 0;
}


error:
------
void value not ignored as it ought to be
  

Ответ №1:

Ваша проблема возникает отсюда:

 [[self insert] performSelectorOnMainThread:@selector(display) withObject:nil waitUntilDone:YES];
  

[self insert] имеет возвращаемый тип void, поэтому вы не можете использовать его в качестве получателя.

Я думаю, вы имели в виду написать:

 [self insert];
[self performSelectorOnMainThread:@selector(display) withObject:nil waitUntilDone:YES];
  

Комментарии:

1. Я хотел сначала вызвать метод display, а затем я хочу вызвать метод insert. Метод dispaly должен дождаться, пока метод insert выполнит обработку, и он должен сигнализировать потоку отображения по завершении.

2. Если вы сделаете это так, как я написал, вставка будет выполнена в созданном вами потоке, а отображение будет вызвано в основном потоке после завершения вставки. В таком порядке. Поэтому я не вижу причины для обратного вызова.

3. да, делать так, как это легко. и это не выполняет работу параллельно, не так ли.

4. Нет, это не так. Но вы не хотите, чтобы это выполнялось параллельно. В любом случае, я думаю, вам следует задать новый вопрос, если ошибка вас больше не беспокоит. Удачи.

5. Я тоже обеспокоен своими ошибками. Но я не смог прийти к тому, что я хочу получить на выходе, и я сожалею, что я не задал свой вопрос четко. Он работает, когда сделал то, что вы сказали мне сделать. Спасибо.