2012-06-01 6 views
0

내 프로젝트에 여러 클래스가 있습니다. 응용 프로그램이 시작되면 응용 프로그램 대리인에 데이터베이스가 만들어집니다. 다른 클래스에서이 데이터베이스에 액세스해야하므로이 다른 클래스에서 응용 프로그램 대리인의 객체 (대리자라고 함)를 만들었습니다. 일반적으로 데이터베이스를 엽니 다, 나는이 경우에는, 그러나다른 클래스의 sqlite3 변수에 액세스

if(sqlite3_open([Delegate.databasePath UTF8String], &database) == SQLITE_OK) 

같은 것을 할 것입니다, 변수 데이터베이스는 글로벌이며, 부모 클래스에 있지 않습니다. 이 경우 어떻게 데이터베이스를 열 수 있습니까? 나는

if(sqlite3_open([Delegate.databasePath UTF8String], &Delegate->database) == SQLITE_OK) //error: instance variable database is protected 

if (sqlite3_open([Delegate.databasePath UTF8String], &Delegate.database) == SQLITE_OK) //Error: Address of property expression requested

그러나이 작품의 없음을 시도했습니다.

답변

1

데이터베이스 인스턴스 변수를 응용 프로그램 대리인에 넣거나 "싱글 톤 패턴"을 사용하십시오.

(그러나 나는 "데이터베이스"피연산자의 특성에 혼란 스러울 수 있습니다. 메서드 선언에 sqlite3 **으로 선언되어 있으며 sqlite3 * 포인터의 주소 여야합니다. parm 전달 시도가 방해됩니다. Objective-C 클래스의 필드는 일반적으로 public이 아니며 속성의 주소를 사용할 수 없으므로이 문제를 해결할 수있는 가장 간단한 방법은 해당 주소를 반환하는 것입니다. sqlite3 * 변수 (예 : return &mySqlite3Variable)를 위임 클래스에서 저장하고 있습니다.

관련 문제