У меня есть 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;
}
любые идеи?
is w.wineName a keep'ed property? Это звучит немного похоже на то, что строка автоматически освобождается. Не могли бы вы разместить определение объекта Wine? – RichB
Какова ваша идентификатор сеттера или свойства для свойства 'wineName'? – Sven
Спасибо за то, что указали это. Я работаю в тандеме с другим разработчиком, и это «@property (nonatomic, assign) NSString * wineName;» однако, меняя его на «@property (неатомный, сохраняющий) NSString * wineName;' работает отлично. – rson