2010-05-28 7 views
0
NSString *strSql = @"select tblrecentsearch_id,xmlrequest,company,postcode,city,kilometer,date from tblrecentsearch"; 

returnValue = sqlite3_prepare_v2(database, [strSql UTF8String], -1, &selectStatement, NULL); 
if(returnValue == SQLITE_OK) 
{ 
    arrRecentSearch=[[NSMutableArray alloc] init]; 

    while(sqlite3_step(selectStatement)==SQLITE_ROW) 
    { 
    Search *ObjSearch = [[Search alloc]init]; 
    ObjSearch.intRecentSearchId = sqlite3_column_int(selectStatement, 0); 
    ObjSearch.xmlRequest = [NSString stringWithCString:(char *)sqlite3_column_text_check(selectStatement, 1) encoding:NSUTF8StringEncoding]; 
    ObjSearch.strCompnay=[NSString stringWithCString:(char *)sqlite3_column_text_check(selectStatement, 2) encoding:NSUTF8StringEncoding]; 
    ObjSearch.strPostCode=[NSString stringWithCString:(char *)sqlite3_column_text_check(selectStatement, 3) encoding:NSUTF8StringEncoding]; 
    ObjSearch.strPlace = [NSString stringWithCString:(char *)sqlite3_column_text_check(selectStatement, 4) encoding:NSUTF8StringEncoding]; 
    ObjSearch.strKilometer = [NSString stringWithCString:(char *)sqlite3_column_text_check(selectStatement, 5) encoding:NSUTF8StringEncoding]; 
    ObjSearch.strDate = [NSString stringWithCString:(char *)sqlite3_column_text_check(selectStatement, 6) encoding:NSUTF8StringEncoding]; 

    [arrRecentSearch addObject:ObjSearch]; 

    [ObjSearch release]; 
    } 
} 

sqlite3_finalize(selectStatement); 

릴리스 arrRecentSearch를 원하지만 함수에서 반환됩니다. 이 배열을 어떻게 realise 할 수 있습니까? 도와주세요. 데이터베이스에서 데이터를 가져 왔습니다. 아이폰에서 객체가 해제되지 않습니다.

return [arrRecentSearch autorelease]; 

당신은 오토 릴리즈 개체를 반환하려는 경우이

를 작동하는 방법에 대한 자세한 내용은 apple memopry management guidelines에서보세요, 당신이 경우에 그것을 유지하기 위해 기억해야합니다

+1

return [arrRecentSearch autorelease]; – hooleyhoop

답변

1

그냥 autorelease를 나중에 주위에 그것을 유지 wnat. 당신이 속성을 사용할 수 있습니다,

... 
NSArray *results = [[self getSearchResults] retain]; //!< Remember the retain here! 
... 

또는 우리는 오토 릴리즈 배열

- (NSArray *) getSearchResults { 
    return [[[NSArray alloc] init] autorelease]; 
} 

에게 반환하는 기능을 가지고 있고 나중에에 대한 검색 결과를 기억하고 싶은 즉, 경우에 당신은이 일을 기억해야한다 보관 : 당신은 그냥 오토 릴리즈로두면

@property (nonatomic, copy) NSArray *searchResults; 

... 
self.searchResults = [self getSearchResults]; //!< The property handles the retain for you here 
... 

어느 쪽이든, 사라질 것 그리고 당신은 예외를받을거야!

편집 : MustISignUp이 의견에 대답했습니다.

+0

감사하지만 예외가 잡히지 않는 예외를 생성합니다 – user344799

+1

예외는 무엇입니까? arrRecentSearch가 그것을 유지한다는 것을 기억하는 방법이 있습니까? – deanWombourne

+0

autorelease는 객체를 반환하는 올바른 방법이지만 호출자는 그것을 유지할 어딘가에 넣어야합니다. 그렇지 않으면 다음 번에 자동 릴리스 풀이 비워집니다. – progrmr

관련 문제