0

我正在尝试为一个名为“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 的隐式转换。我该如何解决这个问题?

4

2 回答 2

2

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

  • 不要为letterAsked参数取一个完整的字符串,然后char从中取出一个,只需将一个char(or unichar) 作为你的参数开始。您完全避免了letter = (char)letterAsked转换。
  • 不要做len指针。您可能根本不需要申报len。考虑像这样编写for循环:

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

    这也有助于您-characterAtIndex:通话;您不再需要取消引用x来获取角色。

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

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

于 2012-07-16T17:14:43.270 回答
1

NSUIntegertypedefunsigned intunsigned long具体取决于您的平台。 它不是对象类型。因此,当您声明 时NSUInteger *x=0,您将声明x为指向无符号整数的指针,并将其初始化为 null。

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

只需*for声明和characterAtIndex:消息中取出。

您的方法中也确实存在其他问题,例如转换letterAsked为 achar而不是使用characterAtIndex:并声明len为指针将字符从中取出。

于 2012-07-16T17:15:24.207 回答