オブジェクト自体を削除せずに、別の配列のオブジェクトを指すNSMutableArrayのポインターを削除しようとしています。例えば:
// In ViewController.m – Code abridged and somewhat simplified
@interface ViewController ()
@property (nonatomic, strong) NSMutableArray *objectPool;
@property (nonatomic, strong) NSMutableArray *objectsOwnedByFriend;
@property (nonatomic, strong) NSMutableArray *objectsOwnedByMe;
- (void)transferPointerToObjectFromFriendToMe;
- (void)copyPointerToObjectFromFriendToMe;
@end
@implementation ViewController
@synthesize objectPool = _objectPool;
@synthesize objectsOwnedByFriend = _objectsOwnedByFriend;
@synthesize objectsOwnedByMe = _objectsOwnedByMe;
- (void)setObjectPool:(NSMutableArray *)objectPool
{
_objectPool = objectPool;
}
- (NSMutableArray *)objectPool
{
if (!_objectPool) _objectPool = [[NSMutableArray alloc] initWithArray:self.objects]; // self.objects is a mutable array containing multiple NSObjects
return _objectPool;
}
- (void)setObjectsOwnedByFriend:(NSMutableArray *)objectsOwnedByFriend
{
_objectsOwnedByFriend = objectsOwnedByFriend;
}
- (NSMutableArray *)objectsOwnedByFriend
{
if (!_objectsOwnedByFriend)
{
_objectsOwnedByFriend = [[NSMutableArray alloc] init];
[_objectsOwnedByFriend addObjectsFromArray:self.objectPool];
}
return _objectsOwnedByFriend;
}
- (void)setObjectsOwnedByMe:(NSMutableArray *)objectsOwnedByMe
{
_objectsOwnedByMe = objectsOwnedByMe;
}
- (NSMutableArray *)objectsOwnedByMe
{
if (!_objectsOwnedByMe) _objectsOwnedByMe = [[NSMutableArray alloc] init];
return _objectsOwnedByMe;
}
- (void)transferPointerToObjectFromFriendToMe
{
[self.objectsOwnedByMe addObject:[self.objectsOwnedByFriend lastObject]];
[self.objectsOwnedByFriend removeLastObject];
}
- (void)copyPointerToObjectFromFriendToMe
{
[self.objectsOwnedByMe addObject:[self.objectsOwnedByFriend lastObject]];
}
@end
上記のコードで、transferPointerToObjectFromFriendToMeを使用すると、最後のオブジェクトを削除すると、self.objectsOwnedByFriend内のオブジェクトへのポインター(必要に応じて)と、self.objectPool内のオブジェクト自体(発生したくない)の両方が削除されます。
私が欲しいのは、実際のオブジェクトをすべて含む配列(self.objectPool)と、self.objectPool内のオブジェクトへのポインターとさらに追加および削除する機能を含む2つの可変配列(self.objectsOwnedByFriendおよびself.objectsOwnedByMe)です。 self.objectPool内のオブジェクトをself.objectsOwnedByFriendおよびself.objectsOwnedByMeに参照するポインター。
また、transferPointerToObjectFromFriendToMeまたはcopyPointerToObjectFromFriendToMeのいずれかを使用すると、self.objectsOwnedByMe.countによる後続のチェックの結果が1ではなく0になるため、オブジェクトが適切に追加されていないようです。
解決策=self.objectsOwnedByMeの遅延インスタンス化が元のコードにありませ
んでした:Sself.objectsOwnedByMeが適切に作成されたかどうかを次の方法で確認できました。
NSLog(@"self.objectsOwnedByMe = %@", self.objectsOwnedByMe);
**私の最初のStackOverflowの質問!**私は明確だったと思います...同様の質問を見つけることができなかったので、古いスレッドを見逃した場合はお詫びします。診断するためにさらに情報が必要な場合はお知らせください。(私はObj-Cを学ぼうとしています。)