小编Sre*_*jit的帖子

将NSArray的计数与整数值进行比较会导致代码执行错误

我在iPhone程序中遇到了一个特殊的问题.这是我的代码 -

在我的视图控制器的viewDidLoad中,我创建了一个数组

grades = [[NSArray arrayWithObjects:@"Grade 1", @"Grade 2", @"Grade 3", nil] retain];
Run Code Online (Sandbox Code Playgroud)

现在我有一个房产

@property (nonatomic) NSInteger selectedGradeIndex;
Run Code Online (Sandbox Code Playgroud)

我写了以下setter方法

- (void) setSelectedGradeIndex:(NSInteger)newValue
{
  if(newValue >= [grades count])
  {
    NSLog(@"newValue = %d >= [grades count] = %d",newValue, [grades count]);
    newValue = 0;
  }
  else if(newValue < 0)
  {
    NSLog(@"newValue = %d < 0",newValue);
    newValue = [grades count] - 1;
  }

  selectedGradeIndex = newValue;
  lblGrade.text=  [grades objectAtIndex:selectedGradeIndex];
}
Run Code Online (Sandbox Code Playgroud)

在我的代码中的某个地方

self.selectedGradeIndex = -1;
Run Code Online (Sandbox Code Playgroud)

setter中的日志显示

newValue = -1 >= [grades count] = 6 …
Run Code Online (Sandbox Code Playgroud)

objective-c ios

4
推荐指数
1
解决办法
710
查看次数

警告 - 在协议中找不到释放

我创建了一个协议和一个类来使用该协议.

JSTest.h文件=

@protocol JSTestDelegate

@end

@interface JSTest : NSObject {

    id<JSTestDelegate> delegate;
}

@property (nonatomic, retain) id<JSTestDelegate> delegate;

- (id)initWithDelegate:(id<JSTestDelegate>)del;

@end
Run Code Online (Sandbox Code Playgroud)

JSTest.m文件=

#import "JSTest.h"


@implementation JSTest

@synthesize delegate;

- (id)initWithDelegate:(id<JSTestDelegate>)del {

    self = [super init];

    if(self) {

        self.delegate = del;
    }

    return self;
}

- (void)dealloc {

    [delegate release];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 在dealloc方法中,

[delegate release]
Run Code Online (Sandbox Code Playgroud)

给我一个警告

-release not found in protocol(s)
Run Code Online (Sandbox Code Playgroud)

我无法确定原因.我的代码不应该失败,因为委托将永远是NSObject的子类.但是,我遇到了一些错误的警告,我忽略了警告而没有理解出现警告的原因.

iphone objective-c ios

0
推荐指数
1
解决办法
564
查看次数

标签 统计

ios ×2

objective-c ×2

iphone ×1