我很新的Objective-C。我已閱讀a similar question,但我無法弄清楚如何解決我的問題與該信息。NSNumber numberWithInt崩潰的數字> = 13
基本上,我這樣做:
NSMutableArray* array1 = [[NSMutableArray alloc] initWithCapacity: 1];
NSNumber *n1 = [NSNumber numberWithInt: 12];
[array1 addObject: n1];
NSMutableArray* array2 = [[NSMutableArray alloc] initWithCapacity: 1];
NSNumber *n2 = [NSNumber numberWithInt: 13];
[array2 addObject: n2];
添加的NSNumber 12到陣列工作完全正常,但添加13(或任何更高)不;該程序在運行時崩潰(沒有錯誤消息,並且生成的堆棧轉儲文件完全空白)。如果有問題,我正在用Cygwin編譯gcc。 據我所知,這可能與保留計數有關,就像我在上面提到的問題,但我不知道如何解決它。即使我註釋掉最後一行,它也會崩潰......所以它會在numberWithInt調用中崩潰,這意味着如果爲n2添加保留語句,它將不會有機會被調用。
編輯:既然我被要求更多的代碼,這裏是我爲了測試這個問題方面取得的文件:
#import <stdio.h>
#import <Foundation/NSArray.h>
#import <Foundation/NSValue.h>
int main(int argc, const char *argv[])
{
printf("1.\n");
NSMutableArray* array1 = [[NSMutableArray alloc] initWithCapacity: 1];
NSNumber *n1 = [NSNumber numberWithInt: 12];
[array1 addObject: n1];
NSMutableArray* array2 = [[NSMutableArray alloc] initWithCapacity: 1];
NSNumber *n2 = [NSNumber numberWithInt: 13];
[array2 addObject: n2];
printf("2.\n");
return 0;
}
這版畫「1」。然後崩潰,如上所述。這是我的makefile:
CYGWIN_GNUSTEP_PATH=/cygdrive/c/GNUstep
CXX = gcc
MAIN = DummyGame
SOURCES = DummyGame.m
OBJECTS = $(SOURCES:%.m=%.o)
COMP_FLAGS = -std=c99 -I $(CYGWIN_GNUSTEP_PATH)/GNUstep/System/Library/Headers -L $(CYGWIN_GNUSTEP_PATH)/GNUstep/System/Library/Libraries -fconstant-string-class=NSConstantString
LINK_FLAGS = $(COMP_FLAGS) -lobjc -lgnustep-base
all: $(MAIN)
$(MAIN): $(OBJECTS)
$(CXX) -o [email protected] $^ $(LINK_FLAGS)
%.o: %.m $(HEADERS)
$(CXX) -c $< $(COMP_FLAGS)
clean:
$(RM) $(MAIN) $(OBJECTS)
你不會在那部分代碼中做任何錯誤。你需要發佈更多。 – Yuji
我在Xcode 4.1中試過了,它工作正常。我認爲它是一個gcc/Cygwin錯誤。 –
發佈您的*整個*代碼,如果它是一個合理的大小。發佈最小的**完整**示例來證明問題。發佈你如何編譯代碼(命令行,Makefile等)。 –