我在objective-c中遇到了一个与数组中的指针相关的问题。
我尝试做的是获取NSArray中的指针,将它们传递给一个方法,然后将返回的值赋回到原始指针(属于数组的指针)。
根据我对C和C++的了解,通过取消引用数组中的指针,我应该能够更改它们所指向的值……下面是我正在使用的代码,但它不起作用( value phone指向根据NSLog输出永远不变)。
NSArray *phoneNumbers = [phoneEmailDict objectForKey:@"phone"];
for (NSString* phone in phoneNumbers) {
(*phone) = (*[self removeNonNumbers:phone]);
NSLog(@"phone:%@", phone);
}
下面是我将NSString*传递给的方法签名:
- (NSString*) removeNonNumbers: (NSString*) string;
如您所见,我使用变量phone遍历了phoneNumbers中的每个NSString*。我将电话传递给removeNonNumbers:,它返回修改后的NSString*。然后,我取消对从removeNonNumber返回的指针的引用,并将该值赋给phone。
如你所知,我可能不太理解Objective-C对象。我非常确定这在C++或C中可以工作,但我不明白为什么它不能在这里工作!提前感谢您的帮助!
发布于 2009-11-23 19:06:16
是的,那是行不通的。你需要一个NSMutableArray
NSMutableArray * phoneNumbers = [[phoneEmailDict objectForKey:@"phone"] mutableCopy];
for (NSUInteger i = 0; i < [phoneNumber count]; ++i) {
NSString * phone = [phoneNumbers objectAtIndex:i];
phone = [self removeNonNumbers:phone];
[phoneNumbers replaceObjectAtIndex:i withObject:phone];
}
[phoneEmailDict setObject:phoneNumbers forKey:@"phone"];
[phoneNumbers release];
发布于 2009-11-23 19:09:02
您不能取消引用Objective-C对象变量。它们总是指针,但是你应该把它们当做原子值来对待。您需要改变数组本身以包含您正在生成的新对象。
发布于 2009-11-23 19:04:11
NSArray
不是C/C++样式的数组。它是一个Objective-C对象。您需要使用NSArray
类的instance methods来对其执行操作。
在Objective-C中,您永远不会“取消引用”对象指针来设置它的值。
此外,您使用的是所谓的Fast Enumeration,它不允许发生突变。
https://stackoverflow.com/questions/1785253
复制相似问题