ios - 局部声明隐藏实例变量 - 属性和综合

标签 ios objective-c cocoa

更新0

您是否要将所有 deals 更改为 _deals,将所有 iboards 更改为 _iboards 并添加下面的方法,然后在 processPbn 方法的末尾调用它?如果是这样,调用是什么样的?

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

更新0

我想让 2 个变量 dealsiboards(在 BSViewcontroller 中计算)可在 BSdealViewController< 中使用。我在 BSViewController.m 末尾(最后 3 行)的代码中遇到以下两个语义问题。

"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

(由于上述原因?)我还收到错误在下面的 NSLog 指令中使用未声明的标识符“iboard”

BSdealViewController.m

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

@interface BSdealViewController ()

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

最佳答案

"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]];
        ^^^^^

将方法名称中的变量更改为 aDealsaIboards 或与 ivars 不同的内容。

关于ios - 局部声明隐藏实例变量 - 属性和综合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15321465/

相关文章:

objective-c - 是否有可用于描述人的 Cocoa 初始值设定项?

objective-c - itemClicked 事件选择器 objective-c

ios - 如何使用for循环在页面控件中打印数组(swift4)

ios - 释放Core Foundation对象

ios - Safari 服务崩溃 [SFAuthenticationViewController dismissViewControllerAnimated :completion:]

iphone - 一个 TTURLRequestModel 中的多个请求

ios - 如何在以编程方式创建实体时设置 NSManagedObjectModel 的配置。

objective-c - 两个日期之间有多少个季度?

ruby - 在循环读取大文件时如何防止 RubyMotion 中的内存泄漏

ios - 如何在 xamarin ios 中自定义 UITableViewCell 的背景颜色?