2010-08-31 2 views
0

У меня есть NSObject, который я использую для хранения/хранения свойств объекта, одним из которых является свойство «Имя», отлитое как NSString. Я также вытаскиваю данные из базы данных SQLite для указанного объекта, используя следующее:Странное поведение с свойствами NSObject

- (void) getDataToDisplay:(NSString *)dbPath { 

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { 

     NSString *queryOnStyle = [NSString stringWithFormat: 
     @"SELECT WineId, Name FROM wine WHERE StyleId = %d", dataManager.styleId]; 

     const char *sql = [queryOnStyle UTF8String]; 
     sqlite3_stmt *selectstmt; 
     if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) { 

      while(sqlite3_step(selectstmt) == SQLITE_ROW) { 

       Wine *w = [[Wine alloc] init]; 

       w.wineId = sqlite3_column_int(selectstmt, 0); 
       w.wineName = [NSString stringWithUTF8String: 
           (char *)sqlite3_column_text(selectstmt, 1)]; 

      [dataManager.wines addObject:w]; 
      [w release]; 
      }  
     } 
    } 
    else 
     sqlite3_close(database); //Even though the open call failed, close the database connection to release all the memory. 
    } 

Вино являюсь объектом для меня. Если в этот момент я должен был зарегистрировать w.wineName, проблем нет. Проблема возникает позже, когда я пытаюсь получить доступ к свойствам объекта из массива, dataManager.wines, в пользовательский tableView. Он вдруг лечит мой wineName как UIImageView, а не как NSString ...

Я за жизнь мне ничего не могу проследить, чтобы когда-либо быть брошенным как UIImageView и понятия не имею, почему это было бы настройки только что свойство как таковое , Вот код для моей таблицы tableView:

#pragma mark - 
#pragma mark HorizontalTableViewDelegate methods 

- (NSInteger)numberOfColumnsForTableView:(HorizontalTableView *)tableView { 
    return [dataManager.wines count]; 
} 

- (UIView *)tableView:(HorizontalTableView *)aTableView viewForIndex:(NSInteger)index { 

    UIView *vw = [aTableView dequeueColumnView]; 
    if (!vw) { 
     [[NSBundle mainBundle] loadNibNamed:@"ColumnView" owner:self options:nil]; 
     vw = self.columnView; 
     self.columnView = nil; 

    } 

// Get the wineId from the array of wineId integers 

Wine *w = [dataManager.wines objectAtIndex:index]; 

int tempWineId = w.wineId; 
NSString *tempWineName = [NSString stringWithFormat:@"%@", w.wineName]; 

NSLog(@"%@", tempWineName); \\RETURNS TEMPWINENAME AS A UIIMAGEVIEW 
[w release]; 
return vw; 
} 

- (CGFloat)columnWidthForTableView:(HorizontalTableView *)tableView { 
//TODO: This value needs to change if changed in IB 
    return 209.0f; 
} 

любые идеи?

+2

is w.wineName a keep'ed property? Это звучит немного похоже на то, что строка автоматически освобождается. Не могли бы вы разместить определение объекта Wine? – RichB

+0

Какова ваша идентификатор сеттера или свойства для свойства 'wineName'? – Sven

+0

Спасибо за то, что указали это. Я работаю в тандеме с другим разработчиком, и это «@property (nonatomic, assign) NSString * wineName;» однако, меняя его на «@property (неатомный, сохраняющий) NSString * wineName;' работает отлично. – rson

ответ

0

Решенный в комментариях по вопросу RichB:

является w.wineName retain'ed недвижимость? Это звучит немного похоже на то, что строка автоматически освобождается. Не могли бы вы разместить определение объекта Wine?