this class is not key value coding-compliant for the key btnSize

책 예제를 따라하거나, 이미 만들어진 ViewController와 mainstory.swift를 합칠 경우,

내부 Widget에 정의한 action에 대해 연결이 깨진 경우가 발생한다.

확인하려면, Xcode에서 Triggered Segues에 링크가 깨져서 노란색으로 경고를 띄워주는 것을 발견할 수 있다. 이것을 다시 만들어서 정의해 주면 된다. 

Swift 오류 확인하는 화면

오류 내용은 아래와 같이 나타난다. 

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x103a17520> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key btnSize.'
*** First throw call stack:
(
	0   CoreFoundation                      0x00000001804b910c __exceptionPreprocess + 172
	1   libobjc.A.dylib                     0x0000000180092da8 objc_exception_throw + 72
	2   CoreFoundation                      0x00000001804b8ca0 -[NSException init] + 0
	3   Foundation                          0x0000000180e9da3c -[NSObject(NSKeyValueCoding) setValue:forKey:] + 268
	4   UIKitCore                           0x00000001853b7dc4 -[UIViewController setValue:forKey:] + 76
	5   UIKitCore                           0x00000001857435ec -[UIRuntimeOutletConnection connect] + 80
	6   CoreFoundation                      0x00000001804a5cf0 -[NSArray makeObjectsPerformSelector:] + 192
	7   UIKitCore                           0x0000000185736ee4 -[UINib instantiateWithOwner:options:] + 1420
    8   UIKitCore                           0x00000001853bf7a8 -[UIViewController loadView] + 392
	9   UIKitCore                           0x00000001853bfa64 -[UIViewController loadViewIfRequired] + 152
	10  UIKitCore                           0x00000001853c0000 -[UIViewController view] + 20
	11  UIKitCore                           0x00000001852f4628 -[UITabBarController transitionFromViewController:toViewController:transition:shouldSetSelected:] + 912
	12  UIKitCore                           0x00000001852eef70 -[UITabBarController _setSelectedViewController:performUpdates:] + 352
	13  UIKitCore                           0x00000001852eedd4 -[UITabBarController setSelectedViewController:] + 80
	14  UIKitCore                           0x00000001852f3a98 -[UITabBarController _setSelectedViewControllerAndNotify:] + 216
	15  UIKitCore                           0x00000001852f3964 -[UITabBarController _tabBarItemClicked:] + 160
	16  UIKitCore                           0x0000000185b36e3c -[UIApplication sendAction:to:from:forEvent:] + 96
	17  UIKitCore                           0x00000001850f969c -[UITabBar _sendAction:withEvent:] + 380
	18  UIKitCore                           0x0000000185b36e3c -[UIApplication sendAction:to:from:forEvent:] + 96
	19  UIKitCore                           0x000000018540c830 -[UIControl sendAction:to:forEvent:] + 108
	20  UIKitCore                           0x000000018540cb74 -[UIControl _sendActionsForEvents:withEvent:] + 268
	21  UIKitCore                           0x00000001850fbfb0 -[UITabBar _buttonUp:] + 96
	22  UIKitCore                           0x0000000185b36e3c -[UIApplication sendAction:to:from:forEvent:] + 96
	23  UIKitCore                           0x000000018540c830 -[UIControl sendAction:to:forEvent:] + 108
	24  UIKitCore                           0x000000018540cb74 -[UIControl _sendActionsForEvents:withEvent:] + 268
	25  UIKitCore                           0x000000018540b80c -[UIControl touchesEnded:withEvent:] + 392
	26  UIKitCore                           0x0000000185b6aa10 -[UIWindow _sendTouchesForEvent:] + 972
	27  UIKitCore                           0x0000000185b6be20 -[UIWindow sendEvent:] + 2840
	28  UIKitCore                           0x0000000185b4b80c -[UIApplication sendEvent:] + 376
	29  UIKitCore                           0x0000000185bd5c70 __dispatchPreprocessedEventFromEventQueue + 1156
	30  UIKitCore                           0x0000000185bd8c00 __processEventQueue + 5592
	31  UIKitCore                           0x0000000185bd0f10 updateCycleEntry + 156
	32  UIKitCore                           0x00000001850a5cec _UIUpdateSequenceRun + 76
	33  UIKitCore                           0x0000000185a60858 schedulerStepScheduledMainSection + 168
	34  UIKitCore                           0x0000000185a5fc90 runloopSourceCallback + 80
	35  CoreFoundation                      0x000000018041d294 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
	36  CoreFoundation                      0x000000018041d1dc __CFRunLoopDoSource0 + 172
	37  CoreFoundation                      0x000000018041c940 __CFRunLoopDoSources0 + 232
	38  CoreFoundation                      0x0000000180416e84 __CFRunLoopRun + 788
	39  CoreFoundation                      0x00000001804166f4 CFRunLoopRunSpecific + 552
	40  GraphicsServices                    0x00000001905e5b10 GSEventRunModal + 160
	41  UIKitCore                           0x0000000185b319dc -[UIApplication _run] + 796
	42  UIKitCore                           0x0000000185b35bd4 UIApplicationMain + 124
	43  UIKitCore                           0x0000000184f0a334 block_destroy_helper.22 + 9660
	44  Tab.debug.dylib                     0x0000000102f0103c $sSo21UIApplicationDelegateP5UIKitE4mainyyFZ + 120
	45  Tab.debug.dylib                     0x0000000102f00fb4 $s3Tab11AppDelegateC5$mainyyFZ + 44
	46  Tab.debug.dylib                     0x0000000102f010b8 __debug_main_executable_dylib_entry_point + 28
	47  dyld                                0x0000000102479410 start_sim + 20
	48  ???                                 0x00000001025ca154 0x0 + 4334592340
	49  ???                                 0x9874000000000000 0x0 + 10985405391063482368
)
libc++abi: terminating due to uncaught exception of type NSException
Exception	NSException *	
"[<UIViewController 0x103a17520> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key btnSize."	0x0000600000c9dfe0

 

Posted by 목표를 가지고 달린다
,

익명함수(클로져, Closure) 이해하기

  함수 비고
함수원본 func 함수명 ( 파라미터명 : 자료형) -> (반환자료형) {
             실행 구문
}
보통함수
1 { ( 파라미터명 : 자료형) -> (반환타입) in 실행 구문 } 익명함수
2 { (파라미터명) in 실행 구문 }
3 { 파라미터명 in 실행 구문 }

위의 방식을 이용한 아래의 예제를 보시면서 이해해보세요.

  함수 비고
함수원본 func completeWork(completed : Bool) -> () {
    print ("complete : \(completed)") 
보통함수
1 { (completed: Bool) -> () in print ("complete : \(completed)")  } 익명함수

2 { (completed: Bool)         in print ("complete : \(completed)")  }
3 { (completed)                  in print ("complete : \(completed)")  }
4 { completed                    in print ("complete : \(completed)")  }

위와 같이 실행구문은 변함이 없으나, 함수 호출을 정의하는 부분이 많이 축약(함수명, 파라미터의 자료형 등) 됩니다.

사실 클로져에 대한 활용은 많은 예시문을 별도로 보관하고 계시다가 발췌해서 이용하거나, 기존 것을 활용해서 수정해서 사용하시면서 익히시는 것이 많은 도움이 될 것입니다. 특히, 집합 관련하여 filter 등을 활용한 예제들은 소스코드를 많이 간결하게 만들어주기 때문에 꼭 한번 찾아 보세요.

Posted by 목표를 가지고 달린다
,

아침에  출근해서 버벅이는 PC 재부팅 시간 절약하기

윈도우 컴퓨터는 "작업 스케쥴러(taskschd.msc)"가 있어서 원하는 작업(스크립트 포함)을 특정 시간마다 실행될 수 있도록 예약을 할 수 있습니다.

매일 아침 출근해서 버벅이는 컴퓨터는 재부팅하는게 귀찮다면, 출근시간에 맞춰 특정 작업을 예약할 수 있습니다. 

그중에서 가장 기초적인 종료, 강제 종료, 재시작에 대해 알아보겠습니다.

1. "작업스케쥴러(taskschd.msc)" 를 실행합니다.
2. 작업명을 정합니다.
3. 작업주기(매일? 매주? 이틀에 한번?) 을 정합니다.
4. 작업시간을 정합니다.
5. 작업 내용을 정합니다.

1. 작업스케쥴러(taskschd.msc)를 윈도우 실행창을 통해 실행합니다.

윈도우+R 키를 누른 후, 작업스케쥴러를 입력하여 실행합니다.

2. 작업 스케쥴러가 아래와 같이 실행 되면, "기본 작업 만들기"를 클릭합니다. 

3. 작업 스케쥴러에 "작업명"을 임의로 넣습니다.

4. 작업 스케쥴러에 작업을 언제 시작할지를 선택합니다. 

5. 작업 스케쥴러에 작업을 몇시에 시작할지? 그리고 매일? 이틀에 한번 할지? 를 선택합니다.

6. "프로그램 시작"(기본값) 을 선택합니다. (의무를 두지 말고, 선택하세요)

7. 시스템 종료 명령어를 입력합니다. (예약시간 기준으로, 1분후 강제종료)

8. 예약 작업이 잘 등록되었는지 확인합니다.

 

종료, 리부팅 명령어에 대한 다양한 옵션는 다음 글을 참고하세요.

2024.12.02 - [잡다한 상식] - 컴퓨터 자동종료, 리부팅을 위한 스케쥴러 명령어

마치면서...

외근을 자주 나가서 컴퓨터를 켜고 나가는 것이 맘에 쓰이는 분들에게는 좋은 방법일 것 같습니다. 더불어 PC에서 자동 게임을 돌릴때, 특정 시간이되면 종료시킬 때도 유용할 것 같습니다. 

사실 자동종료만큼 필요한 것이 부팅인데, 자동 부팅 설정은  BIOS화면에서 설정해야 하는데, 컴퓨터에 익숙하지 않은 분들은 어렵게 느껴질 수 있어 주변 분들께 도움을 받아 설정하시는 것을 추천합니다. 하지만, 어렵지는 않기에 한번 도전해 보실 분들은 아래의 글을 따라해 보세요.

2024.12.02 - [잡다한 상식] - 매일 출근 전 컴퓨터 자동으로 부팅하기

 

Posted by 목표를 가지고 달린다
,

매일 아침 8시에 PC를 자동으로 부팅하는 방법

컴퓨터를 재부팅하거나, 컴퓨터를 자동 종료하는 것은 다음 글을 참고해주세요

2024.12.02 - [잡다한 상식] - 컴퓨터 매일 자동 재시작, 자동 종료, 자동 끄기

출근 전, 미리 컴퓨터를 켜두면 아침 시간을 단축할 수 있습니다. 회사 정책에 따라서는 미리 출근 도장도 찍을 수 있겠죠?

BIOS 화면이라는 생소한 곳에서 설정을 하는 것이지만, 사실상 어렵지 않습니다. 쉽게 따라하실 수 있습니다.


  • 컴퓨터를 재부팅하면서, 윈도우가 시작되기 전에 F12 클릭(또는 F2, F6을 누릅니다. 제조사 별로 다름)
  • BIOS 화면에서 "BIOS Setup" 을 선택
  • 왼쪽 Settings 아래에 "Power Management > Auto On Time" 을 선택
  • 주기/시간을 선택(매일? 영업일만? / 몇시)
  • 저장하고 나오기 (Save as Custom User Settings? OK)

1. 컴퓨터를 재부팅하면서, 윈도우가 시작되기 전에 "F12" 클릭하면, BIOS 화면으로 이동

- 언제 눌러야 할지 모르신다면, 컴퓨터가 꺼진 이후 부터 1초에 한번씩 F12 눌러줘도 됩니다.

BIOS화면으로 들어간 상태...윈도우 시작화면과 다릅니다.!

2. BIOS 화면에서 BIOS Setup을 클릭합니다.

3. BIOS Setup을 클릭하면 아래의 화면으로 이동하고, 여기서 Power Management > Auto On Time 을 선택합니다. 

4. 3번과 동일한 화면에서 오른쪽 택입니다. 여기서는 날짜와 시간을 선택합니다.

  • Every Day : 매일 
  • Weekdays : 월~금
  • Select Days : 내가 원하는 요일만!

5. 설정한 정보를 저장하고 나옵니다.

마치며...

컴퓨터 종료도 좋지만, 사실 유용하게 사용될 것은 내가 출근하기 직전에 켜져 있는 컴퓨터가 아닐까 싶습니다. PC종료와 더블어 회사생활에 큰 도움이 되길 바랍니다. 

2024.12.02 - [잡다한 상식] - 컴퓨터 매일 자동 재시작, 자동 종료, 자동 끄기

Posted by 목표를 가지고 달린다
,

PC를 켜두고 몇시간 뒤 컴퓨터 자동 종료를 예약하기

윈도우에서 쉽게 자동 종료, 리부팅을 예약할 수 있습니다. 

또한, 작업스케쥴러에 등록하여 반복 작업을 실행할 때도 동일하게 명령어를 입력하면 반복되는 일을 자동화할 수 있습니다.

cmd 창에서 shutdown(종료) 을 입력하고, 옵션을 다양하게 주어 상황별로 실행할 수 있습니다.

  • -s : stop  : (단순) 종료
  • -r : reboot : 재부팅
  • -t : time : 시간(초단위) .. ex) -t60 : 60초 뒤에 실행
  • -f : force : 강제로 실행
  • -a : abort  : 명령어 취소
shutdown -s -t 3600 -f : 1시간 뒤에 강제 종료
shutdown -s -t 60 -f   : 1분뒤 강제 종료
shutdown -r -t 3600    : 1시간 뒤에 리부팅
shutdown -r -t 60      : 1분 뒤에 리부팅
shutdown -a            : 종료(리부팅) 명령어 취소

다양한 옵션으로 PC 종료, 부팅을 자유롭게 실행할 수 있습니다. 

외근 등으로 종종 외근 상태에서 퇴근을 하는 분이라면, 항상 저녁 9시에 자동 종료를 예약해 두시면, 컴퓨터가 켜진 상태라면 예약작업으로 자동 종료되므로 컴퓨터 관리를 안정적으로 할 수 있습니다. 

Posted by 목표를 가지고 달린다
,

시간 단축을 위해,  노션을 사용한다면 자주 사용할 만한 단축키를 추천해요

작성 중인 블록 선택 "Esc"
제목 1(가장 큰 제목) "#" 입력 후, "스페이스 바"
제목 2(중간 크기 제목) "#", "#" 입력 후, "스페이스 바"
제목 3(가장 작은 제목) "#", "#", "#" 입력 후, "스페이스 바"
인용 형식 ' " ' 입력 후, "스페이스 바"
리스트 생성 "*" 도는 "+" 또는 "-" 누른 후, "스페이스 바"
번호 생성 "1"과 "." 누른 후, "스페이스 바"
토글 생성 ">" 누른 후, "스페이스 바"
체크박스 생성 "[ ]" + "스페이스 바"
이모티콘 삽입!!!!!!(맥북) "Ctrl 키"와 "cmd키" 누르면서, "스페이스 바" 
특정 이모티콘 삽입 " : "  + "특정 단어" 을 입력시 해당 이모티콘 생성
구분선 복사 등 항목을 누른 상태에서, "Alt키"(맥은 "옵션키")를 눌러 드래그 & 드랍
글자색 또는 배경색 / 각 생삭의 영문명
구분선 "-", "-", "-" 
(편집) 굵게 처리 "Ctrl 키" 누른 후, "B" (Bold)
최근 사용한 명령어(제목 설정, 편집 설정 등) "Ctrl 키" + "Shift 키" + "H"를 동시에 누르면 재수행
강조하는 문구 (큰 박스 포함) - 콜아웃 /callout   

처음 노션을 사용하거나 입문자일 경우, 기본적인 단축키 몇개만 사용하더라도 생각보다 엄청난 시간 효율이 있으니 익숙해질 때까지 노력해보시면 좋은 결과가 있을 겁니다. 화이팅!

1. 많은 것을 시도하는 것보단 몇개라도 손에 익숙해지는 것이 중요합니다.!

윈도우와 맥북의 단축키 차이..

2.  / 로 적용할 수 없는 서식

  • ** 텍스트 ** : 굵게 처리
  • *텍스트*  : 기울임꼴 처리
  • ~텍스트  : 취소선 처리
  • 텍스트를 선택한 후, (Ctrl, 맥은 command) + B : 굵게 처리
  • 텍스트를 선택한 후, (Ctrl, 맥은 command) + I  : 기울임꼴 처리
  • 텍스트를 선택한 후, (Ctrl, 맥은 command) + (Shitft) + S : 취소선 처리
  • 텍스트를 선택한 후, (Ctrl, 맥은 command) + E : 인라인 처리 (일정 텍스트만 박스에 담기)

요약하며, 

보기 좋은 문서가 읽기 좋습니다. 가독성 높습니다. 이해가 잘 됩니다.

 

 

Posted by 목표를 가지고 달린다
,

올해는 어떤 선물로 부모님을 기쁘게 해드릴까요?

이제 곧 5월이 얼마남지 않았습니다. 선물 사달라는 자식과 달리, 따로 살고 있는 부모님께 어떤 선물로 찾아뵐까요? 

결혼하여 양가를 챙기기 바쁜 우리들.. 멀리 타지에 사는 우리, 하필 그날이 당직이라 찾아뵙기도 힘든 우리.. 미리 선물이라도 준비하여 마음을 표현하는 건 어떨까요? 물론, 보고싶어하시는 손주와 함께 식사를 하는 게 제일 좋습니다. 

작년 어버이날 선물 TOP10은...

1위
😊 계좌이체보다는 다양한 디자인과 재미를 가득 담은 용돈 박스가 많아 취향에 맞게 재미와 실용성을 함께..

• 플라워 용돈박스
금장미 용돈박스
한약 용돈박스
...
2위
🤣부모님 건강이 가족 모두의 행복입니다. 면역력과 부족한 비타민을 챙겨주세요.

• 면연력 높이는 홍삼
눈에 좋은 루테인
노화방지의 글루타치온
간에 좋은 밀크시슬
장에 좋은 프로바이오틱스 유산균
혈액에 좋은 징코, 니아이신
관절에 좋은 보스웰리아

 
3위
😘나대신 마사지해서 혈액순환과 긴장된 근육을 풀어줄 마사지건입니다.

제품에 따라 가격차이가 심하기에 주변에 구매한 사람에게 직접 후기를 확인하세요

강력한 진동을 원하시는 분들은 하이퍼볼트(트레이너분들이 많이 사용)를 추천합니다. 
4위
😍부모님께 식사준비&설겆이 없이 편하게 식사를 하려면 외식을 추천합니다.

집에서 식사하길 원하신다면, 재료만 준비하면 되는 고기를 추천합니다. 비싼 고기를 맘편히 넉넉하게...
5위
🤣물걸레질도 잘하고, 밧데리도 충전 잘되는 로봇청소기로 부모님의 무릎을 보호해주세요.

확실히, 초기 로봇청소기보다 성능이 좋아졌습니다.
6위
❤️부모님 휴대폰이 2년이 넘었다면, 매일 사용하시는 휴대폰을 바꿔주세요..

요즘 휴대폰 기기를 어떻게 사야하는지 너무 어려워졌습니다. 대리점 가면 왠지 비쌀거 같고...

기기 변경을 원하지 않으시면, 멋진 케이스라도..

7위
🤣 여행은 갈 수 있을 때 많이 돌아다녀야 한다는 말...

멀지 않지만, 낯선 나라로...

지금은 당장 멀리 유럽 부터?
8위
💕엄마의 아이돌..
9위
😍안마기를 사기에는 부담스러운 경우, 다리 맛사지를 찾아보세요. 꽉꽉 힘있게 눌러줘서 TV보시면서 즐기기 좋습니다. 가까운 하이마트에서 한번 체험해 보세요..


10위
😍💕🤣❤️😘😊😂👌

짧은 시간이라도 

"내 얼굴" 보여드리는게 제일 좋은 선물입니다. 

2주전에 배송 주문을 해야 제때 도착할 수 있습니다.

어린이날과 더불어 함께 가족간에 즐거운 시간 보내시기 바랍니다.

 

Posted by 목표를 가지고 달린다
,

3월 누구나 클래식 <이금희의 해설클래식-일상을 만나다>

세종문화회관에서 하는 3월 공연

공연일자 2024. 03. 31(일) 오후 5시
장소 세종대극장
공연시간 90분 (인터미션 없음)
신청 접수 지금부터 ~ 03.10(일) 00시 까지
연령 2017년 이전 출생자 (만 7세미만 관람 불가)
티켓 전석 1천원/3천원/5천원/1만원 (관람료 선택제)
예매 3월 10일까지 신청 접수하고, 당첨자에 한해 2매까지 예매가능
3명 가족이 볼 경우, 2명이 신청해야 함.
비당첨자 잔여석 예매 3월 21(목) 오전 10시부터 ~ 03.31(일)까지 선착순 예매

멀리 이동하기 어렵다면, 예산이 부족하다면..?

굳이 비싼 돈들여 멀리 떠나기 보다는 서울시내에서 작은 비용으로 관람하는 클래식도 일종의 여행입니다.  

신청일자가 5일(3월10일 00:00시 까지) 남았으니, 서두르시기 바랍니다. 당첨자 발표는 3월 13일(수) 15시이고, 당첨자에 한해 티켓 예매를 3월 20일(수) 18시까지 하면 됩니다. 당첨되지 않으신 분들은 3월 21일(목) 10:00 ~ 03.31(일)까지 잔여석 예매를 할 수 있습니다.

Posted by 목표를 가지고 달린다
,