2012-06-07 4 views
0

나는 질문이있다. 나는 종종 책 (책)과 사용자 목록이있는 경우를 접한다. 각 사용자는 몇 권의 책을 가지고 있습니다. 또한 일반 사용자 (게시 권한, 즐겨 찾기)보다 많은 속성을 가진 현재 로그인 한 사용자의 특수한 경우가 있습니다.핵심 데이터를 사용하여 사용자 개체 저장

모든 이전 프로젝트에서 나는 CurrentUser라는 사용자의 하위 클래스를 작성했으며 현재 사용자 속성/논리가 있습니다 (일반 사용자는 로그 아웃 할 수 없습니다). 하지만 항상 CurrentUser 개체가 하나만 존재한다는 문제를 해결해야합니다.

어떻게 다른 사람들이 이것을합니까? 그리고 나는 이것을 정확히하고 있습니까?

답변

0

는 제가 질문을 이해 꽤 잘 모르겠지만, 당신은 내가 싱글 톤 클래스의 종류를 설정합니다 CurrentUser 하나 개의 인스턴스 만이 있다는 것을 제어하려는 경우, 유형 CurrentUser의 속성을 가지고 SessionController을 말한다.

그래서 어디서나 해당 속성에 액세스 할 수 있으며 해당 클래스의 인스턴스가 하나뿐이므로 현재 사용자의 속성 하나만 사용할 수 있다는 것을 알고 있습니다.

CurrentUser* cu = [[SessionController sharedSessionController] currentUser]; 
if(!cu) // allowed 
else // not allowed 

로그인 할 때 해당 속성을 채 웁니다. 로그 아웃 할 때는 아무 것도 설정하지 마십시오. 다른 사용자와 함께 입장하고자 할 때, 해당 부동산에 대해 확인할 수 있습니다. 이것은 대부분의 경우에 사용할 수있는 단순한 접근 방식입니다.

질문에 대해서는 왜 User 엔티티를 서브 클래 싱했는지 잘 모르겠습니다. 그러나 아마도 그것에 대한 동기가 있습니다. 하위 클래스를 다룰 때주의를 기울이십시오. 실제로 sqlite 저장소를 사용하는 경우 Core Data는 사용자가 만든 하위 클래스를 병합합니다. 따라서 귀하의 경우에는 CurrentUser에서 생성 한 속성을 가진 User 테이블 만 있습니다. 컨트롤이 DB 파일에 대해 수행 할 경우

편집

질문의 제목을 읽고, 나는 LoggedUser라는 엔티티를 생성하고 서브 클래스를 사용하지 않는 것입니다.

여기에서 현재 사용자의 ID와 원하는 다른 속성을 저장할 수 있습니다. 이미 로그온 한 사용자가 있는지 확인하려는 경우

그런 다음, 당신은 단순히 다음과 같은 요청을 설정할 수 있습니다 : 제기

NSInteger count = [fetchRequest countForFetchRequest:&error]; // query against `LoggedUser` 
if(count >= 1) // not allowed 
else // allowed 
+0

좋아, 내가 솔루션으로 갈거야 당신의 편집하다. 나는 또한 서브 클래 싱 문제를 발견했다. CoreData가 플랫 데이터베이스 또는 이러한 종류의 멀티 테이블 데이터베이스보다 효율적인지 아는 사람 있습니까? 나는 안드로이드에 대해 알고 있습니다. 나는 항상 평평한 데이터베이스를 목표로합니다. –

+0

그것은 다릅니다. 멀티 테이블 DB를 사용한다면 다른 테이블에서 데이터를 검색하는 작업을 더 많이 수행해야합니다. 반대로, 플랫 한 것을 사용하면 메모리에 앱에 유용하지 않은 속성이 많을 수 있습니다. 원하는 경우 답변 및/또는 업데이트로 표시하십시오. 건배. –

+1

의미가 있습니다. 그래, 그래, 마킹이야, 나는 그것을 표시하고있어 :) –