2013-12-19 35 views
1

當試圖發送一個DELETE請求與對象的服務器,RestKit嘗試,如果你填充success塊像這樣引用解除分配的對象:RKObjectManager的DeleteObject的與EXC_BAD_ACCESS

[[APIClient objectManager] deleteObject:object path:path parameters:nil 
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
    success(); 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    failure([error localizedDescription]); 
}]; 

success()回調不執行任何操作因爲我注意到RestKit會自動爲我們刪除本地的Core Data對象。

如果我將success塊設置爲nil,那麼所有對世界都很好,但我寧願有一種方法來知道它是成功的。

我猜測它試圖在映射結果中引用已刪除的對象,但我無法確定。服務器只返回no content標題,因此沒有任何可映射的內容。

有什麼我可能做錯了,導致這一點?

+0

把你的塊叫別的東西(所以在討論時很清楚) - 你調用的塊是存在還是零? – Wain

回答

2

爲了安全起見,重寫代碼爲:

[[APIClient objectManager] deleteObject:object path:path parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
    if (success != nil) { 
     success(); 
    } 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    if (failure != nil) { 
     failure([error localizedDescription]); 
    } 
}]; 

因爲試圖執行一個nil塊是一件壞事。

此外,當您定義successfailure的屬性時,請確保將它們設置爲copy(而不是strong)。

+0

現貨。這是一個明顯的錯誤,我只是在推翻它。感謝您的澄清。 – iwasrobbed