Странное поведение с NSObject Properties - PullRequest
0 голосов
/ 31 августа 2010

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

- (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.
    }

Wine - мой объект.Если бы мне пришлось регистрировать 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;
}

есть идеи?

1 Ответ

0 голосов
/ 31 августа 2010

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

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

...