2012-03-04 4 views
5

Я пытаюсь включить этот bit of code в новый (iOS 5) проект ... Проблема в том, что я использую ARC, и он ДЕЙСТВИТЕЛЬНО не нравится код, написанный.iOS5 ошибки ARC: SKPSMTPMessage

Я смог решить большинство ошибок, но я застрял в 3-х ошибках, которые я не могу понять.

Ошибка № 1:

Существующие Ивар 'делегат' для unsafe_unretained собственности 'делегата' должен быть _unsafe_unretained

.h

@interface SKPSMTPMessage : NSObject { 
    NSOutputStream *outputStream; 
    NSInputStream *inputStream; 

    id <SKPSMTPMessageDelegate> delegate; 
} 

@property(nonatomic, assign) id <SKPSMTPMessageDelegate> delegate; 

.m

@synthesize login, pass, relayHost, relayPorts, subject, fromEmail, toEmail, parts, requiresAuth, inputString, wantsSecure, \ 
delegate, connectTimer, connectTimeout, watchdogTimer, validateSSLChain; 

Ошибки # 2 & # 3:

Передача адрес нелокального объекта _autoreleasing параметр для обратной записи

.h

@interface SKPSMTPMessage : NSObject { 
    NSOutputStream *outputStream; 
    NSInputStream *inputStream; 

    id <SKPSMTPMessageDelegate> delegate; 
} 

. м

[NSStream getStreamsToHostNamed:relayHost port:relayPort inputStream:&inputStream outputStream:&outputStream]; 

Любое руководство будет принята с благодарностью.

Спасибо.

+0

Посмотрите на HTTP: // StackOverflow.com/questions/8138902/existing-ivar-delegate-for-unsafe-unretained-property-delegate-must-be-un –

ответ

6

Я нашел правильное решение для этого вопроса.

Ответ: Не задумывайтесь о том, как конвертировать код вручную.

Вам просто нужно добавить компилятор флаг -fno-objc-arc импортным классов

enter image description here

0

Ошибка № 1
Replase

@property(nonatomic, assign) id <SKPSMTPMessageDelegate> delegate; 

Для

@property(nonatomic, _unsafe_unretained) id <SKPSMTPMessageDelegate> delegate; 

Вы не можете использовать assign с ARC

Ошибка № 2,3
Попробуйте не alloc и initoutputStream и inputStream переменные.

NSInputStream *inputStream; 
NSOutputStream *outputStream; 
[NSStream getStreamsToHostNamed:relayHost port:relayPort inputStream:&inputStream outputStream:&outputStream]; 
+0

Спасибо ... Я фактически просто отключил ARC для этой библиотеки. – dbarrett

+0

Всякий раз, когда я отключу ARC для своего файла «SKPSMTPMessage.m» (предполагая, что отключение происходит, когда вы добавляете флаг компилятора «-fno-objc-arc»), я просто получаю сообщение об ошибке Apple Mach-O Linker, говоря, что есть дубликат символа найденный. У вас была эта ошибка? Если да, то как вы обошли его? !!? А если нет, что я делаю неправильно? Matt –