2011-09-07 24 views
0

我在實現文件下面的代碼:未使用的變量問題

#import "Possession.h" 


@implementation Possession 
@synthesize possessionName,serialNumber, valueInDollars, dateCreated; 

+ (id)randomPossession 
{ 
    // Create an array of three adjectives 
    NSArray *randomAdjectiveList = [NSArray arrayWithObjects:@"Fluffy", 
           @"Rusty", 
           @"Shiny", nil]; 

    // Create an array of three nouns 
    NSArray *randomNounList = [NSArray arrayWithObjects:@"Bear", 
          @"Spork", 
          @"Mac", nil]; 

    // Get the index of a random adjective/noun from the lists 
    // Note: The % operator, called the modulo operator, gives 
    // you the remainder. So adjectiveIndex is a random number 
    // from 0 to 2 inclusive. 
    unsigned long adjectiveIndex = rand() % [randomAdjectiveList count]; 
    unsigned long nounIndex = rand() % [randomNounList count]; 

    NSString *randomName = [NSString stringWithFormat:@"%@ %@", 
         [randomAdjectiveList objectAtIndex:adjectiveIndex], 
         [randomNounList objectAtIndex:nounIndex]]; 

    int randomValue = rand() % 100; 

    NSString *randomSerialNumber = [NSString stringWithFormat:@"%c%c%c%c", 
           'O' + rand() % 10, 
           'A' + rand() % 26, 
           'O' + rand() % 10, 
           'A' + rand() % 26, 
           'O' + rand() % 10]; 

    // Once again, ignore the memory problems with this method 
    Possession *newPossession = 
    [[self alloc] initWithPossessionName:randomName 
         valueInDollars:randomValue 
         serialNumber:randomSerialNumber]; 

    return newPossession; 

    return [newPossession autorelease]; 


} 

- (id) initWithPossessionName:(NSString *)name 
      valueInDollars:(int)value 
      serialNumber:(NSString *)sNumber 
{ 
    // Call the superclass's designated initializer 
    [super init]; 

    // Give the instance variables initial values 
    [self setPossessionName:name]; 
    [self setSerialNumber:sNumber]; 
    [self setValueInDollars:value]; 
    dateCreated = [[NSDate alloc] init]; 

    // Return the address of the newly initialized object 
    return self; 


} 

- (id) init 
{ 
    return [self initWithPossessionName:@"Possession" 
        valueInDollars:0 
         serialNumber:@""]; 
} 

- (NSString *)description; 
{ 
    NSString *descriptionString = 
    [[NSString alloc] stringWithFormat:@"%@ (%@): Worth $%d, recorded on %@", 
    possessionName, 
    serialNumber, 
    valueInDollars, 
    dateCreated]; 
} 


- (void) dealloc 
{ 
    [possessionName release]; 
    [serialNumber release]; 
    [dateCreated release]; 
    [super dealloc]; 
} 




@end 

對於descriptionString,我得到一個未使用的變量錯誤,並且讀取行「dateCreated會],」我得到線程1:程序接收到的信號:「SIGABRT」錯誤打開調試器。對於緊隨其後的行,我收到一個Control達到非void函數錯誤的結束。

這裏是頭文件:

#import <Foundation/Foundation.h> 


@interface Possession : NSObject { 
    NSString *possessionName; 
    NSString *serialNumber; 
    int valueInDollars; 
    NSDate *dateCreated; 
} 

+ (id)randomPossession; 

- (id)initWithPossessionName:(NSString *)name 
      valueInDollars:(int)value 
      serialNumber:(NSString *)number; 

- (id) init; 

@property (nonatomic, copy) NSString *possessionName; 
@property (nonatomic, copy) NSString *serialNumber; 
@property (nonatomic) int valueInDollars; 
@property (nonatomic, readonly) NSDate *dateCreated; 

@end 

這裏是主文件:

#import <Foundation/Foundation.h> 
#import "Possession.h" 

int main (int argc, const char * argv[]) 
{ 

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    // Create a mutable array, store its address in items variable 
    NSMutableArray *items = [[NSMutableArray alloc] init]; 

    for(int i = 0; i < 10; i++) { 
     Possession *p = [Possession randomPossession]; 
     [items addObject:p]; 
    } 

    for (int i = 0; i < [items count]; i++) 
     NSLog(@"%@", [items objectAtIndex:i]); 

    [items release]; 

    // Don't leave items pointed at freed memory! 
    items = nil; 

    [pool drain]; 
    return 0; 
    } 
+0

你的標題聲稱你有一個問題,但你所做的只是轉儲三大塊代碼,沒有努力去隔離問題,而且你甚至不想問一個問題? –

+0

您是否閱讀過這是執行文件後面的內容? 「對於descriptionString,我得到一個未使用的變量錯誤,對於讀取」dateCreated「的行,」,我得到一個線程1:程序接收到的信號:「SIGABRT」錯誤,打開調試器。以下,我收到一個控制達到非無效功能錯誤的結束。「 – pdenlinger

回答

0

爲了描述方法,

  1. 局部變量descriptionString從未使用其他然後被創建。
  2. 這是一個非無效的方法,你永遠不會返回任何東西
  3. SIGABRT很可能是由擁有者,serialNumber,valueInDollars,dateCreated之一爲零的其中一個造成的。