2012-06-19 18 views
0

的深度複製,我試圖讓使用另一個NSMutableAttributedString稱爲textBackupNSMutableAttributedString稱爲text的深層副本。兩者都設置爲@property (nonatomic, retain)屬性,我創建了備份操作如下:問題使NSMutableAttributedString

NSMutableAttributedString *textBackupTemp = [self.text mutableCopy]; 
self.textBackup = textBackupTemp; 
[textBackupTemp release]; 

然後後來,當某個場景出現時,我需要恢復副本:

NSMutableAttributedString *textTemp = [self.textBackup mutableCopy]; 
self.text = textTemp; 
[textTemp release]; 

這似乎是工作罰款,但下一次我訪問text類似如下:

[self.text.string characterAtIndex: self.cursor.position-1] 

我得到以下錯誤:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString characterAtIndex:]: Range or index out of bounds' 

字符串大小已更改爲1,而不是像它應該是43。這裏可能會發生什麼......

編輯:更新了問題。

+0

mutableCopy實際上並不返回新的實例,儘管它的名稱。如果原始對象是可變的,它只是返回一個指向它的指針,並增加它的保留數(如果我的內存服務,我知道這是如何完成常規副本)。它只返回一個新對象,原始對象是不可變的。 – borrrden

+0

看到我的意見下面rishi @borrrden –

+0

@borrrden這只是相反的。 – paulmelnikow

回答

0

這只是我的一個愚蠢的錯誤,我把@property(nonatomic, assign)作爲我的textBackup實例變量。我將其更改爲retain,現在一切正常。

相關問題