我在传递一个数字作为方法的参数时遇到了一些麻烦:
- (void)meth2:(int)next_int;
Run Code Online (Sandbox Code Playgroud)
要调用该方法,我需要这个:
int next_int = 1;
[self performSelectorOnMainThread:@selector(meth2:) withObject:next_int waitUntilDone:NO];
//update next_int and call meth2 again
Run Code Online (Sandbox Code Playgroud)
在这一点上,我得到一个"没有强制转换的整数指针"错误,并且会发生相同的情况NSInteger.一个NSNumber没用,因为它是不可变的,我需要不断更改值.知道我该怎么办?
谢谢.
我试图用几个不同的部分制作一个字符串.以下就是我现在所拥有的.我的代码中没有任何错误,但是一旦我运行它并执行触发它的事件我得到EXC_BAD_ACCESS.有没有另一种方法将其NSInteger投入NSString?
NSString *part1, *part2, *tempString;
NSInteger num1;
NSInteger num2;
part1=@"some";
part2=@"text";
tempString = [NSString stringWithFormat:@"%@%@%@%@",
part1,
(NSString *)num1,
part2,
(NSString *)num2];
Run Code Online (Sandbox Code Playgroud) 我想知道可可的不同风格的枚举声明背后的理由是什么?
像这样:
enum { constants.. }; typedef NSUInteger sometype;
Run Code Online (Sandbox Code Playgroud)
是否有理由使用typedef来获取NSUInteger的分配而不进行强制转换?
有时typedef是NSInteger/NSUInteger,为什么不总是使用NSInteger?使用NSUInteger真的有好处吗?
枚举标记名有时仍然使用,就像这里的_NSByteOrder.
这个答案也非常有用:Objective-C中的typedef枚举是什么?.
每个值都typedef enum被视为一个int?
例如,给出以下内容typedef enum:
// UIView.h
typedef enum {
UIViewAnimationCurveEaseInOut,
UIViewAnimationCurveEaseIn,
UIViewAnimationCurveEaseOut,
UIViewAnimationCurveLinear
} UIViewAnimationCurve;
Run Code Online (Sandbox Code Playgroud)
我如何知道使用哪种方法创建NSNumber?
+ (NSNumber *)numberWithShort:(short)value;
+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
+ (NSNumber *)numberWithLong:(long)value;
+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value;
+ (NSNumber *)numberWithLongLong:(long long)value;
+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;
+ (NSNumber *)numberWithInteger:(NSInteger)value NS_AVAILABLE(10_5, 2_0);
+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5, 2_0);
Run Code Online (Sandbox Code Playgroud)
我认为这+[NSNumber numberWithInt:]是正确的使用方法,因为使用Core Data实现Enums的最佳方法的可接受答案.例如:
[NSNumber numberWithInt:UIViewAnimationCurveLinear]
Run Code Online (Sandbox Code Playgroud)
但是,如果+[NSNumber numberWithInt:]是正确的,为什么呢?
对于按位 …
我是Objective-C和Cocoa的新手.我已经读过NSInteger和NSNumber在使用简单整数时是首选,因为它们是原始数字类型的"平台安全"版本(在NSNumber的情况下,包装在一个对象中).所以,我需要一个我的课程中的计数器,当NSTimer激活时它会增加.在Apple论坛上,我发现一群人都向类似情况的人推荐他们应该在标题中声明一个NSNumber指针,用numberWithInt:初始化它,然后每次需要增加它时通过将它分配给一个新的对象(类似的东西counter = [NSNumber numberWithInt:[counter intValue]+1];).这对我来说太过分了.如果我需要的只是一个int计数器(顺便说一句,我会在它达到15后将其重置为0,因此大小不是问题),我不能只使用一个int而不必分配一个每次迭代我的计时器循环的新对象?
如果是这样,我如何在整个班级中提供原始类型.我知道对于对象类型,我在我的界面中声明它并使用@property和@synthesize ...当使用原语时,等价(如果存在)是什么?
这是我的viewcontroller.m文件中的代码
- (void)viewDidLoad{
[super viewDidLoad];
[self.abilitygeneration setText:((TestAbility *)[self.testabilities objectAtIndex:0]).abilitygeneration]; }
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误NSInteger的隐式转换,也就是ARC不允许将NS转换为NSString.如何启用ARC并为此设置解决方法.而不是setText我可以使用什么?
能力生成在TestAbility.h文件中设置为NSInteger ..谢谢
如果整数是正数还是负数,我如何在objective-c编码中说明.我正在这样做,以便我可以写一个"if"语句,声明如果这个整数是正数,那么这样做,如果它的负数做这个.
谢谢,
凯文
为什么这不起作用:
NSInteger sectionLocation = 0;
NSInteger sectionTitles = 1;
NSInteger sectionNotifications = 2;
switch (section) {
case sectionLocation:
//
break;
case sectionTitles:
//
break;
case sectionNotifications:
//
break;
default:
//
}
Run Code Online (Sandbox Code Playgroud)
我得到这个编译错误:
错误:case标签不会减少为整数常量
是不是可以像这样使用NSInteger?如果是这样,是否有另一种方法在switch语句中使用变量作为案例?sectionLocation等具有可变值.
我已经搜查,发现了这个问题,一个以前的答案在这里.问题是标记为解决方案的答案不起作用.在我的tableView:didSelectRowAtIndexPath:方法里面,我有
NSInteger *currentRow = indexPath.row;
Run Code Online (Sandbox Code Playgroud)
它给了我警告'不兼容的整数到指针转换初始化'NSInteger*'(又名'int*'),表达式为'NSInteger'(又名'int').
任何帮助表示赞赏!
我们如何比较两个NSInteger数字?我有两个NSIntegers并比较它们常规方式不起作用.
if (NSIntegerNumber1 >= NSIntegerNumber2) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,第一个值是13,第二个值是17,if循环正在执行
任何的想法 ?
nsinteger ×10
objective-c ×8
iphone ×4
cocoa ×2
ios ×2
nsnumber ×2
nsstring ×2
nsuinteger ×2
xcode ×2
cocoa-touch ×1
enums ×1
ios5 ×1
nsindexpath ×1
typedef ×1
xcode4.2 ×1