2013-03-04 9 views
5

私のコードをARCに変換しようとしていますが、ASIRequestライブラリのNSMakeCollectableに問題があります。ARCに変換する際のNSMakeCollectableの問題

- (NSString*)encodeURL:(NSString *)string 
{ 
    NSString *newString = NSMakeCollectable([(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding])) autorelease]); 
    if (newString) { 
     return newString; 
    } 
    return @""; 
} 

これは私にこのエラー:NSMakeCollectable is unavailable: not available in automatic reference countingを与えています。

どうすれば解決できますか?いくつかのガイダンスが必要です。ありがとう。

EDIT: はこれを試してみました動作していない:

- (NSString*)encodeURL:(NSString *)string 
    { 
     NSString *newString = NSMakeCollectable([(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding])) autorelease]); 
     if (newString) { 
      return (__bridge_transfer NSString*)newString; 
     } 
     return @""; 
    } 

が同様にこれを試し:

- (NSString*)encodeURL:(NSString *)string 
     { 
      NSString *newString = NSMakeCollectable([(__bridge_transfer NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding])) autorelease]); 
      if (newString) { 
       return newString; 
      } 
      return @""; 
     } 
+0

チェックはこのhttp://stackoverflow.com/questions/8594721/nsmakecollectable-and-arc-doesnt-work – tkanzakic

+0

は私が私の質問を編集した... – lakesh

+0

が動作していない...動作していない...それを試してみました。 。 – lakesh

答えて

13

NSMakeCollectableはもはやARCに必要とされません。ここでCFBridgingReleaseを使用できます。

- (NSString*)encodeURL:(NSString *)string 
{ 
    NSString *newString = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding]))); 
    // or NSString *newString = (__bridge_transfer NSString*)(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding])); 
    if (newString) { 
     return newString; 
    } 
    return @""; 
} 
関連する問題