在for循环中为NSMutableArray赋值

时间:2012-07-16 17:03:25

标签: objective-c nsmutablearray

我正在尝试为一个名为“word”的新类编写一个方法,该类是NSString的子类。我想要一个接受包含单个字符的NSString的方法,并返回该字符串的每个实例的单词中的位置。到目前为止我有这个:

@implementation Word
    -(NSMutableArray *)placeOfLetter: (NSString *)letterAsked;{
        NSUInteger *len=(NSUInteger *)[self length];
        int y=0;
        char letter=(char)letterAsked; 

        for (NSUInteger *x=0; x<len; x++) {
                if ([self characterAtIndex:*x]==letter){
                     [matchingLetters insertObject:x atIndex:y];
                     y++;
                }
        }
    }     
@end

然而,xcode告诉我,我不能把x作为insertObject的参数,因为“不允许从NSUInteger到id的隐式转换。我怎么能解决这个问题呢?

2 个答案:

答案 0 :(得分:2)

您遇到的问题主要源于您将NSUInteger视为指针;你还有一些其他的铸造问题。请尝试以下方法:

  • 不是为letterAsked参数获取完整字符串,而是从中获取char,只需获取char(或unichar)作为参数首先。您完全避免了letter = (char)letterAsked转换。
  • 不要使len成为指针。您可能根本不需要声明len。考虑编写for循环,如:

    for(NSUInteger x = 0; x < [self length]; x++) { // ...
    

    这也可以帮助您进行-characterAtIndex:通话;您不再需要取消引用x才能获得角色。

  • 就像Hot Licks在评论中所说,如果你想在NSArray中找到一个位置,请使用NSNumber;你需要数字作为类实例进入NSArray实例。您可以像x这样创建一个NSNumber:

    NSNumber * foundPosition = [NSNumber numberWithUnsignedInteger:x];
    
  • 考虑使用NSMutableArray的-addObject:方法,而不是跟踪y并每次递增它。你会得到相同的结果。

答案 1 :(得分:1)

NSUInteger is a typedef for either unsigned int or unsigned long, depending on your platform.它不是对象类型。因此,当您声明NSUInteger *x=0时,您将x声明为指向无符号整数的指针,并将其初始化为null。

insertObject:atIndex:需要NSUInteger,而不是NSUInteger*作为index参数。

只需从*语句和for消息中取出characterAtIndex:

您的方法中也存在其他问题,例如将letterAsked投射到char而不是使用characterAtIndex:将角色取出,并将len声明为指针。