1

更新 0

toとdealsto_dealsを全部変えて次のメソッドを追加してメソッドの最後に呼び出すということですか?もしそうなら、電話はどのように見えますか?iboards_iboardsprocessPbn

- (id)initWithName:(NSInteger )_iboard deals:(NSArray *)_deals
{
    self = [super init];
    if (self) {
       iboard = _iboard;
        deals = _deals;
        return self;
    }
    return nil;
}

更新 0

で計算される2 つの変数dealsとをで使用できるようにしたいと考えています。BSViewController.mの最後 (最後の 3 行)のコードで、次の 2 つのセマンティックな問題が発生しています。iboardsBSViewcontrollerBSdealViewController

"Local declaration of 'deals' hides instance variable"
"Local declaration of 'iboards' hides instance variable"

BSViewController.h

#import <UIKit/UIKit.h>
@interface BSViewController : UIViewController <....>
        {
            NSInteger iboard;
            NSArray *deals;
            }
@property (nonatomic) NSInteger iboard;
@property (nonatomic, strong) NSArray *deals;
- (void) processPbn;
@end

BSViewController.m

#import "BSViewController.h"
@interface BSViewController ()

@end
@implementation BSViewController
@synthesize iboard, deals;

- (void) processPbn
{
    NSURLRequest *theRequest = [NSURLRequest .....];

    [NSURLConnection sendAsynchronousRequest:theRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *connection, NSData *data, NSError *error)
     {
         NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
         NSString *sp = @"             ";
         NSArray*deals=@[[@[sp, sp, sp, sp]mutableCopy],[@[sp, sp, sp, sp]mutableCopy],[@[sp, sp, sp, sp]mutableCopy],[@[sp, sp, sp, sp]mutableCopy],[@[sp, sp, sp, sp]mutableCopy],[@[sp, sp, sp, sp]mutableCopy]];

         NSString *toMatch = @"...";

         int iboard = 0;
         NSRegularExpression *regex = [....];
         NSUInteger numberOfMatches = [....];
         for (NSTextCheckingResult* board in [.....])
         {
             for (NSUInteger irange = 1; irange < board.numberOfRanges; ++irange)
             {
                 NSRange matchedRange = [board rangeAtIndex: irange];
                 NSString* tstring = [string substringWithRange: matchedRange];
                 for (NSUInteger ix = 0; ix < tstring.length; ++ix)
                 {
                     NSRange cardInSuit = NSMakeRange(ix, 1);
                     int seat = (irange-1)/4 ;
                     int suit = (irange-1)%4 ;
                     NSString* replace= [deals[iboard][suit] ....];
                     [deals[iboard] replaceObjectAtIndex: suit withObject: replace];
                 }
             }
             ++iboard;
         }
     }];
}

@end

(上記の結果ですか?)Use of undeclared identifier 'iboard'以下の NSLog 命令でもエラーが発生します。

BSdealViewController.m

#import "BSdealViewController.h"
#import "BSViewController.h"

@interface BSdealViewController ()

@end
- (void)viewDidLoad
{
    NSLog(@"iboard : %@", iboard);
}
4

2 に答える 2

3
"Local declaration of 'deals' hides instance variable"
"Local declaration of 'iboard' hides instance variable"

deals同じ名前のivarと衝突するメソッドに変数という名前があります。

NSString *toMatch = @"...";

     int iboard = 0;
         ^^^^^^

     NSRegularExpression *regex = [....];

また、

NSString *sp = @"             ";
NSArray*deals=@[[@[sp, sp, sp, sp]mutableCopy],[@[sp, sp, sp, sp]mutableCopy],[@[sp, sp, sp, sp]mutableCopy],[@[sp, sp, sp, sp]mutableCopy],[@[sp, sp, sp, sp]mutableCopy],[@[sp, sp, sp, sp]mutableCopy]];
        ^^^^^

メソッド名の変数をaDealsandaIboardsまたは ivar とは異なるものに変更します。

于 2013-03-10T11:00:24.253 に答える
0

以下は、最も経験豊富な開発者が使用する、従うべき規則です。

可能な場合はプロパティを使用します。たとえば、プロパティ「iboard」やプロパティ「deals」などです。「_iboard」や「_deals」など、先頭にアンダースコアを付けたインスタンス変数を使用します。

先頭にアンダースコアを使用しないでください。

このようにして、ソース コードを読んでいる人は、1 マイル離れたところからインスタンス変数の使用を見つけることができ、プロパティを使用するつもりだったときに誤ってインスタンス変数を使用することはありません。あなたのinitメソッドは

- (id)initWithIBoard:(NSInteger )iboard deals:(NSArray *)deals
{
    if ((self = [super init]) != nil)
    {
        _iboard = iboard;
        _deals = deals;
    }

    return self;
}
于 2014-06-25T10:55:36.930 に答える