9

私は奇妙な問題に2日間苦しんでいます。SOに関するすべての関連する質問を調べましたが、問題を解決するものはありませんでした。私はXcode5に取り組んでいます。私はARCとCoreDataを使用しています。

iOS7 (シミュレーター) の場合:

`[CFString release]: message sent to deallocated instance`

Thread 1, Queue : com.apple.main-thread
0   0x03c7d3ba in __kill ()
1   0x03c7c4b8 in kill$UNIX2003 ()
2   0x0347a921 in ___forwarding___ ()
3   0x0347a4ee in _CF_forwarding_prep_0 ()
4   0x02b7b002 in -[NSConcreteAttributedString dealloc] ()
5   0x02f66692 in objc_object::sidetable_release(bool) ()
6   0x02f65e81 in objc_release ()
7   0x02f66ce7 in (anonymous namespace)::AutoreleasePoolPage::pop(void*) ()
8   0x00739bc4 in CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) ()
9   0x0345253e in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ ()
10  0x0345248f in __CFRunLoopDoObservers ()
11  0x034303b4 in __CFRunLoopRun ()
12  0x0342fb33 in CFRunLoopRunSpecific ()
13  0x0342f94b in CFRunLoopRunInMode ()
14  0x04bd19d7 in GSEventRunModal ()
15  0x04bd17fe in GSEventRun ()
16  0x0196794b in UIApplicationMain ()
17  0x0000262d in main

Zombies Instruments は、セルのテキスト ラベルを設定した 2 行目を指しています。

cell.txtLabel.text = _reservationModule.newReservationText;
cell.subtitleTxtLabel.text = _reservationModule.newReservationSubtitle;

_reservationModule文字列プロパティを特徴とする Core Data エンティティです。ビューコントローラーで次のように定義されています@property (nonatomic, strong) ReservationModule *reservationModule;

ゾンビの歴史:

Event Type  ∆ RefCt RefCt   Timestamp   Responsible Library Responsible Caller
Malloc/Retain/Release (4)   01:01.114.922   CoreData    _prepareResultsFromResultSet
0  Malloc   +1  1   01:01.114.922   CoreData    _prepareResultsFromResultSet
1  Retain   +1  2   01:01.116.184   CoreData    -[_CDSnapshot mutableCopy]
2  Release  -1  1   01:01.318.588   MyApp       -[ReservationModuleChoice2ViewController configureSubtitleImageTableViewCell:atIndexPath:]
3  Release  -1  0   01:05.004.359   CoreData    -[_CDSnapshot dealloc]
4  Zombie       -1  01:07.441.465   CoreData    -[_CDSnapshot dealloc]

ただし、Xcode 4.6.x では発生していません。どんな助けでも大歓迎です!

ありがとう!

4

1 に答える 1

30

答えは簡単で、保持カウンターとは何の関係もありません...

newARC が有効になっている変数/プロパティに名前を付けることは許可されていないことを確認しました。これは明らかにオーバーリリースになり、エラーが発生しました...

Apple のドキュメントから: https://developer.apple.com/library/ios/releasenotes/objectivec/rn-transitioningtoarc/introduction/introduction.html

手動の保持解放コードとの相互運用を可能にするために、ARC はメソッドの命名に制約を課します。

アクセサに new で始まる名前を付けることはできません。これは、別の getter を指定しない限り、たとえば、名前が new で始まるプロパティを宣言できないことを意味します。

于 2013-09-30T11:48:23.507 に答える