我正在尝试删除 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.objectsOwnedByFriend 和 self.objectsOwnedByMe),其中包含指向 self.objectPool 中对象的指针以及添加和删除更多对象的能力将 self.objectPool 中的对象指向 self.objectsOwnedByFriend 和 self.objectsOwnedByMe 的指针。
此外,当我使用 transferPointerToObjectFromFriendToMe 或 copyPointerToObjectFromFriendToMe 时,似乎没有正确添加对象,因为通过 self.objectsOwnedByMe.count 进行的后续检查会导致 0 而不是 1。
SOLUTION = 我的原始代码中缺少 self.objectsOwnedByMe 的惰性实例化:S
我能够通过以下方式检查 self.objectsOwnedByMe 是否正确创建:
NSLog(@"self.objectsOwnedByMe = %@", self.objectsOwnedByMe);
** 我的第一个 StackOverflow 问题!** 我希望我很清楚......找不到类似的问题,如果我错过了一个旧线程,我深表歉意。如果您需要更多信息来诊断,请告诉我。(我正在尝试学习 Obj-C。)