는 제가 질문을 이해 꽤 잘 모르겠지만, 당신은 내가 싱글 톤 클래스의 종류를 설정합니다 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
좋아, 내가 솔루션으로 갈거야 당신의 편집하다. 나는 또한 서브 클래 싱 문제를 발견했다. CoreData가 플랫 데이터베이스 또는 이러한 종류의 멀티 테이블 데이터베이스보다 효율적인지 아는 사람 있습니까? 나는 안드로이드에 대해 알고 있습니다. 나는 항상 평평한 데이터베이스를 목표로합니다. –
그것은 다릅니다. 멀티 테이블 DB를 사용한다면 다른 테이블에서 데이터를 검색하는 작업을 더 많이 수행해야합니다. 반대로, 플랫 한 것을 사용하면 메모리에 앱에 유용하지 않은 속성이 많을 수 있습니다. 원하는 경우 답변 및/또는 업데이트로 표시하십시오. 건배. –
의미가 있습니다. 그래, 그래, 마킹이야, 나는 그것을 표시하고있어 :) –