새로 작성하게 된 App 의 기능 중 Theme 기능이 검토 되었습니다.

XCode3 와는 다르게 Resource 라는 폴더가 없어져서 딱히 Bundle 에 Folder 구조로 어떻게 넣을지를 몰라 헤메이다가 소 뒷걸음에 넣었습니다.

알고보니 간단하네요..

1. Project 파일에서의 Targets 에서 "Build Phases" 를 보시면 아래와 같이 나옵니다.

 

2. 화면에서 "Copy Bundle Resources" 에서 "+" Click

 

3. 상세 아이템을 선택하라고 나오게 됩니다. "Add Other..."

 

4. Finder 가 나오면 추가할 폴더를 추가하시구요.. 선택 하시면 "Create folder references for any added folders" 를 선택하세요.

4.1 "Create groups for any added folders" 는 app 의 bundle root 에 이미지를 동일이름이 있을경우 하나만 놔두고 나머지는 무시합니다.

4.2 "Create folder references for any added folders" 는 Folder 를 참조 하고 파일이 추가 되거나 할경우 폴더 구조를 포함합니다.

 

 

5. Finish 하시면 추가 된 폴더를 볼수 있어요..

 

끝입니다.

 

확인 할수 있는 방법은 시물레이터 빌드 하시고 app 의 페키지를 확인하시면 폴더 구조대로 들어가 있습니다.

해당 폴더에 대한 경로는 "/theme/각이미지" 로 바로 접근 가능합니다. ^^

끝..... 하면 섭섭하니... 추가 Class Source 올립니다.

 

Theme 에 대한 경로 관련 하여 바로 사용할 수 있도록 작성한 내용입니다.

@implementation ThemeMng

 

 

+(NSString*) Path:(NSString*) name

{

return [NSString stringWithFormat:@"/theme/%@/%@",[UserSettingMng getUserSettingOfPlist:@"ThemeName"],name];

}

 

+(void) ChangeTheme:(NSString*) themeName

{

[UserSettingMng setUserSettingOfPlist:@"ThemeName" Value:themeName];

}

 

@end

 

딱 보시면 다들 아시겠죠? ^^

질문은 댓글로 해주세요..

 

즐거운 하루 보내세요!

 

 

 

 

 

신고
posted by Bloody Guy

CoreData를 처음 접하고 예전의 사용 습관 때문에 작성하게된 BaseRepository...

목적은 CRUD 는 걍 했으면 좋겠다.. 입니다.

 

Header

#import <Foundation/Foundation.h>

 

@interface BaseRepository : NSObject

 

@property (strong , nonatomic) NSString *entityName;

 

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;

 

-(id) initModel;

 

- (NSMutableArray*) getAll;

 

- (id) getByID:(id) objectID;

 

- (void) updateModel:(id) modelObj;

 

- (void) deleteMdoel:(id) modelObj;

 

- (id) getRelation:(id)target attrName:(NSString*) attrName;

 

- (NSMutableSet*) getRelationList:(id)target attrName:(NSString*) attrName;

 

- (NSManagedObjectContext *)getMObjContext;

 

-(NSMutableArray*) sortForNSMutableArray:(NSMutableArray*)list sortName:(NSString*)sortName;

 

 

@end

 

Body

#import "BaseRepository.h"

#import "AppDelegate.h"

 

@implementation BaseRepository

 

@synthesize managedObjectContext;

@synthesize entityName;

 

-(id) initModel{

return [NSEntityDescription insertNewObjectForEntityForName:[self entityName] inManagedObjectContext:[self getMObjContext]];

}

 

- (void) deleteMdoel:(id) modelObj{

NSError *error;

[[self getMObjContext] deleteObject:modelObj];

if (![[self getMObjContext] save:&error]) {

NSLog(@"%@",[error localizedDescription]);

}else{

NSLog(@"success to delete!");

}}

 

 

- (void) updateModel:(id) modelObj

{

NSFetchRequest *retrieveRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *friend = [NSEntityDescription entityForName:[self entityName] inManagedObjectContext:[self getMObjContext]];

 

[retrieveRequest setEntity:friend];

NSError *error;

if (![[self getMObjContext] save:&error]) {

NSLog(@"%@",[error localizedDescription]);

}else{

NSLog(@"success to update!");

}

}

 

-(NSManagedObjectContext *)getMObjContext{

if (managedObjectContext == nil) {

managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

}

return managedObjectContext;

}

 

-(NSManagedObjectContext *)OrgGetMObjContext{

if (managedObjectContext == nil) {

managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

}

 

return managedObjectContext;

}

 

 

- (NSMutableArray*) getAll

{

NSEntityDescription *user = [NSEntityDescription entityForName:[self entityName] inManagedObjectContext:[self getMObjContext]];

NSFetchRequest *retrieveRequest = [[NSFetchRequest alloc] init];

 

[retrieveRequest setEntity:user];

NSError *error;

 

NSMutableArray *friendList = [[[self getMObjContext] executeFetchRequest:retrieveRequest error:&error] mutableCopy];

 

return friendList;

}

 

- (id) getByID:(id) objectID

{

//CoreDataDelegate *coredatadelegate = [[CoreDataDelegate alloc] init];

return nil;

}

 

- (id) getRelation:(id)target attrName:(NSString*) attrName

{

return [target valueForKey:attrName];

}

 

- (NSMutableSet*) getRelationList:(id)target attrName:(NSString*) attrName

{

return [target mutableSetValueForKey:attrName];;

}

 

-(NSMutableArray*) sortForNSMutableArray:(NSMutableArray*)list sortName:(NSString*)sortName{

NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:sortName ascending:YES];

NSArray *sorter = [NSArray arrayWithObject:sortByName];

[list sortUsingDescriptors:sorter];

return list;

}

 

@end

 

 

 

작성이후...

지나고 보니.. 꼭 필요 없는 부분같게 느껴집니다.

장점은 각 Model 에 대한 Repository 를 분리해서 나름(?) 편하게 써본다 입니다.

생성조건 패턴을 Repository 에서 처리를 했었는데...

Model 에서 그냥 할껄.. 이라는 생각도 많이 드네요...

Model override 해서 처리 했어도 될만한 일이였습니다.

뭐. 이렇게 삽질하면서.. 얻는거죠. 허허허

 

-- 3월 5일 추가됨 --

CoreDtata schema 에서 변경이 된 경우 자동 생성했을때 작성된 내용이 사라집니다. 손수 변경된 내용에 대해서는 추가 작업을 진행해야 합니다.

동일한 Model을 상속받아서 추가 구현을 하는 것이 좋은 방법으로 보이네요.

그렇게 한다음에 이쁘게.. 처리 해봐야 겠습니다.

 

 

신고
posted by Bloody Guy

앱스토어에 등록한 앱이 리젝 됐습니다. 

아 맘아파라.

리젝된 사유는 등록한 앱의 설명을 쓰는 곳에서 스크린 샷이 문제 였습니다.

앱에 IAd 를 사용하도록 하였는데 그 IAD 의 테스트 메세지가 보여진것이 문제였습니다.

이 화면이 문제였습니다.

"Test Advertisement"  이 화면 덕분에 다시 Waiting for Review 로 들어갔네요.. 

1주일을 기다렸는데 또 다시 1주일을 더 기다려야 될지 모르겠네요.


다른 분들은 이거 실수 하시지마세요.. ^^




추가 정보 입니다.

http://www.facebook.com/note.php?note_id=244298205610544


정책이 자주 바뀌나 보네요.. 허허허...

 

신고
posted by Bloody Guy


티스토리 툴바