Как устранить ошибку «Неявное преобразование указателя Objective C в« const void »запрещено» при использовании [NSValue valueWithPointer: t]? - PullRequest
3 голосов
/ 26 августа 2011

Как исправить ошибку «Неявное преобразование указателя Objective C в« const void »запрещено» при использовании следующего сообщения:

NSValue *key = [NSValue valueWithPointer:t];

Особая благодарность тому, кто может предложить , почему этот код выдает это исключение, если используются простые новички.

Вот полный метод, если он помогает:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *t in touches) {
    // Is this a double tap?
    if ([t tapCount] > 1) {
        [self clearAll];
        return;
    }

    // Use the touch object (packed in an NSValue) as the key
    NSValue *key = [NSValue valueWithPointer:t]; // here is where the error is

    // Create a line for the value
    CGPoint loc = [t locationInView:self];
    Line *newLine = [[Line alloc] init];
    [newLine setBegin:loc];
    [newLine setEnd:loc];

    // Put pair in dictionary
    [linesInProcess setObject:newLine forKey:key];
}

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Я столкнулся с той же проблемой, работая над этим упражнением, во втором издании «Руководства по дальному кругу больших ботаников», которое не охватывает ARC.Вот где возникает проблема.Они обновили свой пример / код решения здесь: http://www.bignerdranch.com/solutions/iOSProgramming3ed.zip

В этом вы можете видеть, что они изменили эту строку на:

NSValue *key = [NSValue valueWithNonretainedObject:t];
0 голосов
/ 10 июля 2012

Попробуйте просто добавить (_bridge void)!

...