2010-06-28 130 views
1

對不起,這個愚蠢的問題。我正在努力學習objc,而且我無法在2個int值之間做一個簡單的求和......事實上,問題是在求和之前。麻煩轉換NSNumber爲int

我有具有定義爲NSNumber的一個實例變量的對象和它的如下定義爲一個屬性:

@interface MyObj : NSObject { 
    NSNumber *count; 
} 
@property (readwrite, assign) NSNumber *count; 
@end 

@implementation MyObj 
@synthetize count; 
@end 

然後,我有一類將消耗MyObj中:

- (void)total:(MyObj *)mobj { 
    int count = [mobj.count intValue]; 

    NSLog(@"%@", mobj.count); 
    NSLog(@"%@", count); 

    int total = 10 + count; 
    NSLog(@"%@", total); 
} 

第一個NSLog很好地打印mobj.count(比方說5),但第二個拋出一個EXC_BAD_ACCESS。當然,這個程序永遠不會達到這個總和。

那麼,我在做什麼錯了?我試圖根據這個post將它轉換爲int。

TIA,

鮑勃

回答

11

的說明符%@是用於打印的OBJ-C的對象,並且它要求該對象的-description。您代碼中的countint。使用%iint s。退房NSLog() Specifiers

0
int count = [mobj.count intValue]; 

應該

count = [NSNumber numberWithInt:[mobj.count intValue]]; 

就說明本身,count是一個NSNumber的,當你試圖將其設置爲一個int。

在您的NSLog嘗試
+0

Evadne Wu也是對的。 – Garrett 2010-06-28 01:01:12

+0

不是不改變類型;試圖將一個NSNumber *分配給一個int。 – bbum 2010-06-28 01:04:38

0

NSLog(@"%@", [count stringValue]); 
+0

我不認爲這會奏效 - count是一個整數。 – 2010-06-28 01:22:57

1
NSLog(@"%@", count); 

應該是:

NSLog(@"%i", count); 

,因爲它是一個int,而不是一個對象。

也期待在

NSLog(@"%@", total); 

,因爲其還沒有對象,但一個int

2

另一個可能的問題:

@property (readwrite, assign) NSNumber *count; 

你最有可能要使用保留所以不會從你下面消失(根據經驗:使用assign爲原始類型,爲對象保留)

@property (readwrite, retain) NSNumber *count;