簡體   English   中英

奇怪的BAD_ACCESS錯誤

[英]Strange BAD_ACCESS error

這聽起來可能是個新手問題,但是我是iOS開發新手,

最近,我改用ARC,並且代碼中出現以下問題。 我已經用以下init方法實現了一個類

- (id)init
{
    self = [super init];
    if (self) {
        TokenManager* tokenManager = [[TokenManager alloc] initWithApikey:<my valid token>];
        mRequest = [[GeoCodingRequest alloc] initWithApikey:apiKey withOptions:nil tokenManager:tokenManager];
        mRequest.delegate = self;
    }
    return self;
}

其中接口中的mRequest聲明如下__strong GeoCodingRequest* mRequest;

在同一個類的其他方法中,我像這樣向mRequest發送一條消息

[mRequest findObject:<some valid array> around:<some valid location> withDistance:<some valid radius>];

當消息發送到對象應用程序時,崩潰並顯示以下消息

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString appendRequestWithToken:]: unrecognized selector sent to instance 0x8974640'

findObject: around: withDistance: -是公共庫中的一種方法,因此我無法訪問其實現。

請幫助我了解為什么會發生此崩潰? 我猜這是來自ARC _ 強/ _弱限定符用法或污穢。

該消息表示mRequest已被釋放,因為字符串現在正在使用以前為mRequest分配的mRequest

您應該在啟用Zombies的情況下運行您的應用,以了解何時釋放mRequest

看起來tokenManager沒有被請求保留(這是庫中的錯誤)。 由於它沒有保留在任何地方,因此將tokenManager釋放,並可以在同一位置分配一個新對象(這里是NSString的實例)。

您需要將tokenManager存儲在一個強大的實例變量中 (與mRequest ),以便在請求需要時保留它。

如果您有任何弱引用,請嘗試使用

MyObject * strongMyObject = weakMyObject;
if(strongMyObject){
   NSLog(@"This is not released");
}

當您的參考文獻薄弱時,這是一個好習慣。 嘗試這個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM