2011-11-23 3 views
6

私はこのコードを持っており、それがアークするポートに必要がありますが、私はどのように知らない:エラーがあるarcでclass_createInstanceを置き換えるにはどうすればよいですか?

 case FIELDTYPE_OBJECT: 
      className = [fieldType substringWithRange:NSMakeRange(2, [fieldType length]-3)]; 
      rel = class_createInstance(NSClassFromString(className), sizeof(unsigned)); 
      Class theClass = [rel class]; 

      if ([rel isKindOfClass:[DbObject class]]) { 
       //Load the record... 
       NSInteger Id = [rs intForColumn:[theClass relationName]]; 
       if (Id==0) { 
        fieldValue = [rel init]; 
       } else {      
        Db *db = [Db currentDb]; 

        fieldValue = [db loadById: theClass theId:Id]; 
       } 
      } 
      break; 

error: 'class_createInstance' is unavailable: not available in automatic reference counting mode 

それを置き換える方法は?

実行時にクラスオブジェクトを作成する必要があります。

答えて

1

はこれを試してみてください:

#include <objc/objc-runtime.h> 
id object = [[NSClassFromString(@"TheClassName") alloc] init]; 
+1

これは、class_createInstanceへのextraBytesパラメータを処理しません。 –

+0

alloc initを使用する場合、これはまだ必要ですか? –

+0

コードで余分なバイトが使用されている場合は、はい。そうでなければ、いいえ –

3

最も簡単な解決策は、それに設定された-fno-にObjCアークを持つ別のファイルを追加することで、上記のようにclass_createInstance()を呼び出す機能を有しています。

1

分離した.h/.cファイルを作成し、このようなファイルを作成します。

id const 
MyCreateInstanceOfClass(Class const class) 
{ 
    id  instance = class_createInstance(class, 0); 
    return instance; 
} 

.h#include、およびそれを呼び出します。各ファイルに-fno-bjc-arcスイッチを入れる必要はありません。

関連する問題