2011-07-06 108 views
0

我在X代碼中存在緩存錯誤處理問題。 我評論了一個特定的行,但我仍然得到這條線相同的錯誤。Xcode調試:緩存異常?

我清理了項目,我刪除了構建文件夾,我替換(刪除並再次導入)所有引用。但是,我仍然在沒有任何東西的地方發現錯誤。即使我評論一切,我也會得到同樣的錯誤。

- (void) setTileSource: (id<RMTileSource>)newTileSource 
{ 
    if (tileSource == newTileSource) 
     return; 

    RMCachedTileSource *newCachedTileSource = [RMCachedTileSource cachedTileSourceWithSource:newTileSource]; 

    newCachedTileSource = [newCachedTileSource retain]; 
    [tileSource release]; 
    tileSource = newCachedTileSource; 

--->這裏是SIGABRT異常

 // NSAssert(([tileSource minZoom] - minZoom) <= 1.0, @"Graphics & memory are 
    [projection release]; 
    projection = [[tileSource projection] retain]; 

    [mercatorToTileProjection release]; 
    mercatorToTileProjection = [[tileSource mercatorToTileProjection] retain]; 

    [imagesOnScreen setTileSource:tileSource]; 

     [tileLoader reset]; 
    [tileLoader reload]; 
} 

回答

1

我懷疑這意味着異常不是由您註釋掉的行引起的。

首先,你爲什麼這樣做:

newCachedTileSource = [newCachedTileSource retain]; 

retain回報自己。您不需要將結果分配給相同的對象指針。如果庫覆蓋保留以返回不同的內容,則庫已損壞。

其次,我認爲這可能是一個錯誤:

[projection release]; 
projection = [[tileSource projection] retain]; 

如果projection == [tileSource projection]發佈之前,它可能是某種方式得到了釋放。問題是否消失,如果你這樣做:

RMProjection* newProjection = [[tileSource projection] retain]; 
[projection release]; 
projection = newProjection; 

理想情況下,你會像這樣創建的投影用合成保留屬性(實際上投影可以只獲得來自tileSource值):

-(RMProjection*) projection 
{ 
    return [[self tileSoruce] projection]; 
} 

同爲mercatorToTileProjection。

1

你不應該保留titleSource?嘗試,

tileSource = [newCachedTileSource copy]; 
+0

其被註釋掉日誌的文字,甚至outcommented它顯示在調試區該線路的線路。 –

+0

@Malte O.,那麼,控制檯中的錯誤是什麼? – EmptyStack

0

變化 [tileSource release]; [tileSource autorelease];