묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결iOS12 앱 개발 퍼펙트 가이드
meal cell 클릭시 화면 이동 문제
meal cell 클릭 -> 아무 변화 없음 다시 클릭 -> 이전에 클릭했던 meal cell의 정보가 Detail VC에 출력됩니다. 예를 들면 스파게티를 클릭하면 아무 변화가 없습니다. 그러나 그 다음 케밥이나 파스타를 클릭하면 스파게티 화면이 출력됩니다. 아래는 코드 전문입니다. // // ViewController.swift // foodMaker2 // // Created by Choi Joon on 2021/02/26. // import UIKit class ViewController: UIViewController { @IBOutlet weak var myTF: UITableView! var mealLists = [MealModel]() override func viewDidLoad() { super.viewDidLoad() //xib파일을 만들었으면 이렇게 따로 등록을 해줘야함. //nilName에는 파일명을 적고 forCellReuseIdentifier에는 identifier를 적는다. myTF.register(UINib(nibName: "MealCell", bundle: nil), forCellReuseIdentifier: "mealCell") //더미데이터를 생성 : 해당 데이터들을 MealModel에 넣음 let dummy1 = MealModel.init(name: "스파게티", photo: UIImage(named: "meal1"), rating: 3) //리스트에 추가 mealLists.append(dummy1) let dummy2 = MealModel.init(name: "케밥", photo: UIImage(named: "meal2"), rating: 4) mealLists.append(dummy2) let dummy3 = MealModel.init(name: "파스타", photo: UIImage(named: "meal3"), rating: 5) mealLists.append(dummy3) } //segue가 작동될때 호출되는 함수 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { //segue의 종류를 identifier로 구분 if segue.identifier == "presentDetail"{ }else if segue.identifier == "showDetail"{ //segue의 도착 VC 설정 let detailVC = segue.destination as! MealDetailViewController //클릭한 셀의 인덱스 정보를 가져옴 let selectedIndexPath = sender as! IndexPath //해당 인덱스의 mealModel을 MealDetailViewController의 mealModel에 전달 detailVC.mealModel = mealLists[selectedIndexPath.row] } } } extension ViewController : UITableViewDelegate{ func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { performSegue(withIdentifier: "showDetail", sender: indexPath) } //cell의 높이 지정 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 100 } } extension ViewController : UITableViewDataSource{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return mealLists.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // as! MealCell : MealCell.swift 코드에 접근 // withIdentifier : xib 파일에 존재하는 cell에 접근 let mealCell = tableView.dequeueReusableCell(withIdentifier: "mealCell", for : indexPath) as! MealCell // MealModel의 데이터들을 mealCell로 전달( indexPath로 접근 ) mealCell.name.text = mealLists[indexPath.row].name mealCell.mealImageView.image = mealLists[indexPath.row].photo mealCell.ratingView.rating = mealLists[indexPath.row].rating return mealCell } }
-
미해결김영삼 작가의 XD를 이용한 모바일 UI UX 실무 디자인
23강 XD 에셋링크 관련 질문입니다.
1. 최신 버전 XD UI가 영상 속 XD UI와 달라 에셋링크 추가 버튼이 없습니다. 최신버전 XD에서 에셋링크 방법을 알려주세요. 2. 에셋링크 해서 가져온 에셋을 삭제 가능하다고 하셨는데 똑같이 해봐도 삭제가 안됩니다. 마우스 오른쪽 버튼을 눌러도 삭제버튼이 아예 없는데 삭제 방법을 좀 알려주세요.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
완강하고 난 뒤...
선생님 감사합니다! 덕분에 좋은 강의 완강 했습니다. C# Unity 강의 때도 항상 완강 후에 감사 인사를 전하고 싶었으나 인프런 시스템 적으로 강의 중간에 리뷰 올리라고 해서 급하게 올리고 다시 강의 집중하느라 여기에다가라도 올리고 싶었어요...저는 게임 분야가 아닌 자동화 분야에서 비전과 공장 자동화를 담당하고 있습니다.이쪽 분야는 PLC도 다루어야 하고 Vision도 기초적으로 알아야 하고 Robot 좌표 체계도 공부해야 하다보니 컴퓨터 프로그래밍 지식은 늘릴 시간이 별로 없었습니다. 운좋게 게임 만들기를 취미 삼아 시작하면서 선생님 강의 미리보기로 듣자마자 이 강의는 진짜 내 실력을 높여주겠구나 하는게 딱 느껴지더라구요. 커리큘럼 보고 정말 배울게 많다는 것을 알게 되었고 그리구 나서 선생님께서 가르친 내용들을 모두 Notion에 정리해서 정말 제 실력으로 만들었어요.정리하면 강의 듣는거에 비해 시간이 두배 이상 걸리더라구요...(비록 시간없어서 그 뒤에 실제로 게임을 만들어보진 않았지만.. ㅋㅋㅋ)서버 만들기할 때도 고생해서 배우고 여자친구와 카페가서 공부하고 스터디카페가서도 같이 공부하고 ...(맨날 같이 있을 때 공부만 한다고 투덜대요...)선생님 목소리를 이제 200시간 이상 들으니 정말 곁에 있는 사람마냥 정든 거 같아요. 또 이렇게 감사 인사 전하고자 하는 이유는 Minor한 C++보다 Python과 같은 기초 과목들을 촬영하는 것이 선생님한테 경제적으로 더 도움이 될텐데, (또 여태 어떤거 하실 지 고민하시는 모습도 보았고) 남들이 거의 하지 않는 강의 48시간이나 찍으시는 모습 보고 너무 감동했습니다... 저는 사실 리뷰를 거의 안올리는 편인데 (배민도 맛있어서 리뷰 올린다고 해놓고 항상 까먹고 안올림...)저 같이 꼭 게임을 만드는 포지션이 아니더라도 도움을 받고 있다는 사람도 있다는 사실과선생님 지치시지 않고 완강 찍는 날까지 힘내주십사하고 굽신굽신하면서 질문칸에 리뷰 올려용~~앞으로는 완찍(완강 찍기) 힘내주세요 하고 리뷰에 올릴게용~ ㅎㅎㅎ 성공해서 제자, 스승으로서 언젠가 뵙고 싶습니다. :)사장님 되면 만나주실거죵?~화이팅이에요 쌤! 아래는 정리한거 인증~~ ㅎㅎ
-
[리뉴얼] React로 NodeBird SNS 만들기
swr SSR 적용시 에러
삭제된 글입니다
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
논리연산자 관련
너무 기본적인 내용인 것 같지만.. 궁금해서 여쭤봅니다 { isLoggedIn && <PostForm/> } 이 코드가 isLoggedIn이 true이면 <PostForm/>을 반환하는거잖아요 &&연산자는 두 피연산자가 참인 경우에 참을 반환한다고 알고있는데 어떻게 저렇게 해석되는건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA 기본생성자와 관련된 질문입니다.
안녕하세요 영한님! 강의 정말로 잘듣고 있습니다. 좋은강의 올려주셔서 감사합니다.강의를 듣다가 궁금한점이 생겨서 질문을 작성하게 됬습니다.강의에서 @Entity를 이용하려면 기본생성자가 필요하며, 이는 내부적으로 Reflection기술을 이용하기 때문이라는 사실을 알았습니다.궁금한점은 만약 Setter메서드가 없다면 JPA쪽에서 어떻게 객체에 나머지 필드에 값을 넣어줄 수 있을까? 라는 의문입니다.제가 생각할때 Java에서 필드에 값을 대입할 수 있는 방법은 4가지가 존재합니다.1. 접근제어자를 Public으로 선언 후 값 할당2. 생성자를 통한 값 할당3. Setter메서드를 통한 값 할당4. Reflection의 setAccessible()메서드를 호출 후 값 할당위의 4가지 방법이 떠오르는데, 제 생각에는 4번 방법으로 값을 대입할것 같다는 생각이 듭니다!혹시 위의 4가지 방법외에도 값을 할당할 수 있는 다른 방식이 있거나 JPA는 값을 할당하기 위해서 다른방식을 이용한다면 답변해주시면 감사하겠습니다 ㅠㅠ.
-
해결됨Svelte.js 입문 가이드
Windows 사용자는 npx 명령어 전 'git'을 설치하셔야 합니다.
질문은 아닌데, 윈도우 환경에서 저처럼 오류가 뜨는 분이 계실 것 같아서요. node와 npm이 아래와 같이 모두 설치가 되어있음에도 npx 명령어를 실행하면 아래와 같이 에러가 뜰 수 있습니다. 이렇게 에러가 뜨시는 분들은 PC에 git을 설치하신 뒤에 (git 설치법 출처 : https://likelion-kgu.tistory.com/29) VS Code를 재실행하신 뒤 npx 명령어를 실행하시면 됩니다.
-
미해결[리뉴얼] 처음하는 파이썬 백엔드와 웹기술 입문 (파이썬 중급, flask[플라스크] 로 이해하는 백엔드 및 웹기술 기본) [풀스택 Part1-1]
MYSQL 설치 과정에서 문제가 있습니다..ㅠㅠ
No packages found가 뜨면서 설치가 되지 않습니다 ㅠ 저 에러 문구를 구글에서 쳐서 확인해보는데도 마땅히 해결방법이 나오지 않아서 글을 쓰게 되었습니다.. packages라는 것을 따로 다운을 받아야 하는건지 궁금합니다.
-
해결됨Vue.js 끝장내기 - 실무에 필요한 모든 것
main 페이지로 이동
5_styling 으로 체크아웃 하고 나서 에러 수정하고 페이지도 잘 뜨는데요, 로그인 하면 메인페이지로 이동이 안됩니다. 개발툴 소스에서 파일 확인하면 새로 추가한 this.$router.push('/main'); 가 없는 상태로 돌아가고 있어요. 어떻게 해결 해야 할까요?
-
Svelte.js 입문 가이드
(완료) npx 명령어 실행 시, 오류가 발생합니다.
삭제된 글입니다
-
미해결스프링 핵심 원리 - 기본편
윈도우 단축키 기본값이 Art+Insert 이네요 제 경우에는~
제곧내
-
미해결리액트로 나만의 블로그 만들기(MERN Stack)
MainJuin 으로 로그인 하는법
안녕하세요. 강의 잘 보고 있습니다. 로컬에 MongoDB 세팅하고 작업중입니다. mongoose schema 설정(models/user.js) 에서 role 을 ... role: { type : String, enum: ["MainOwner", "SubOwner", User], default: "User" }... 이렇게 설정하였습니다. MainOwner로 로그인 해야 AddPost 버튼을 볼 수 있을 거 같은데.. PostMan 으로 role MainOwner 로 하여 등록 후 로그인하여 console.log 확인해보니 User 로 등록 되어있더라구요.. MainOwner 으로 등록하려면 어떻게 해야할지 도움 주시면 감사하겠습니다.
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
다른 이펙트들은 사라지지않나요??
안녕하세요 제로초님! 질문이있습니다. yield take의 경우 한번 실행되고 사라진다는 것은 이해했습니다. 제너레이터 함수이므로 그렇겠지요. 1. takeEvery나 takeLatest에 while(true) 와 같은 기능이 있다고 이해했는데 맞는건가요? 2. yield delay나 yield put 같은 것은 왜 사라지지 않나요? 3. yield는 제너레이터함수에서 호출할때마다 하나씩 끊어서 반환되는 것이라 이해했는데 왜 yield delay후에 yield put이 실행되는 건가요? takeLatest이펙트의 기능인가요..?
-
윤재성의 처음시작하는 JavaScript Tutorials
강의 잘 듣고있습니다.
삭제된 글입니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
cmd창에서 h2.sh가 실행되지 않습니다
강의와 같이 실행 하였는데 cmd창에서 파일을 실행시키는게 불가합니다.혹시몰라 cmd도 관리자권한으로 실행하였지만 작동이되지않습니다
-
미해결
파이썬 판다스 설치 질문드립니다.
import pandas as pd df = pd.DataFrame( {"a" : [4 ,5, 6], "b" : [7, 8, 9], "c" : [10, 11, 12]}, index = [1, 2, 3]) 판다스 설치 후에 아래와 같이 뜨는데 해결을 못하겠습니다. pip install을 이용해서 설치했고, 제거했다가 재설치도 해본 상황입니다. C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\getlimits.py:172: RuntimeWarning: divide by zero encountered in exp2 eps=exp2(ld(-112)), C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\getlimits.py:51: RuntimeWarning: divide by zero encountered in log10 self.precision = int(-log10(self.eps)) C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\getlimits.py:52: RuntimeWarning: divide by zero encountered in power self.resolution = float_to_float(float_conv(10) ** (-self.precision)) C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\getlimits.py:184: RuntimeWarning: divide by zero encountered in exp2 epsneg_f80 = exp2(ld(-64)) C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\getlimits.py:185: RuntimeWarning: divide by zero encountered in exp2 tiny_f80 = exp2(ld(-16382)) C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\getlimits.py:199: RuntimeWarning: divide by zero encountered in exp2 eps=exp2(ld(-63)), C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\getlimits.py:211: RuntimeWarning: divide by zero encountered in nextafter huge_dd = (umath.nextafter(ld(inf), ld(0)) C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\getlimits.py:224: RuntimeWarning: divide by zero encountered in exp2 eps=exp2(ld(-105)), C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\getlimits.py:225: RuntimeWarning: divide by zero encountered in exp2 epsneg= exp2(ld(-106)), C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\getlimits.py:227: RuntimeWarning: divide by zero encountered in exp2 tiny=exp2(ld(-1022))) C:\ProgramData\Anaconda3\lib\site-packages\numpy\__init__.py:247: RuntimeWarning: divide by zero encountered in subtract if not abs(x.dot(x) - 2.0) < 1e-5: C:\ProgramData\Anaconda3\lib\site-packages\numpy\__init__.py:247: RuntimeWarning: divide by zero encountered in absolute if not abs(x.dot(x) - 2.0) < 1e-5: <frozen importlib._bootstrap>:219: RuntimeWarning: divide by zero encountered in add
-
미해결리액트로 구현하는 블록체인 이더리움 Dapp
파워쉘에서는 truffle unbox react가 안됩니다 ㅠㅠ
저는 npm 명령창에서 시도해보니 가능했습니다. 혹시 다른분들도 같은 문제 겪고 계시다면 이렇게 해결해보세요!
-
미해결C#과 유니티, 실전 게임으로 제대로 시작하기 (저자 직강)
코드 질문
public float GetHealth(){ return health; } 있으나 없으나 상관 없는거 같은데 이 코드는 무슨 역할을 하나요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
새로 고침 이전에 팔로잉 팔로워 취소가 반영이 안되여
안녕하세요 댓글 삭제 기능을 추가한뒤 테스트할때 새로고침을 안하면 화면 갱신이 안되더라구여 아래 댓글에서 뮤테이션을 적용하면 된다고 하셨는데 문서를 봐도 잘몰겠어서여 어떻게 고쳐야 되는지 알려주시면 감사여 profile.js import AppLayout from "../components/AppLayout"; import Head from "next/head"; import NicknameEditForm from '../components/NicknameEditForm'; import FollowList from '../components/FollowList'; import React, { useEffect, useState, useCallback } from "react"; import Router from 'next/router'; import { useSelector, useDispatch } from 'react-redux'; import { LOAD_USER_REQUEST } from '../reducers/user'; import wrapper from '../store/configureStore'; import axios from 'axios'; import { END } from 'redux-saga'; import useSWR from 'swr'; const fetcher = (url) => axios.get(url, { withCredentials: true }).then((result) => result.data); const Profile = () => { const { me } = useSelector((state) => state.user); const [followingsLimit, setFollowingsLimit] = useState(3); const [followersLimit, setFollowersLimit] = useState(3); const { data: followingsData, error: followingError } = useSWR(`http://127.0.0.1:3065/user/followings?limit=${followingsLimit}`, fetcher); const { data: followersData, error: followerError } = useSWR(`http://127.0.0.1:3065/user/followers?limit=${followersLimit}`, fetcher); console.log("followingsData : ", followingsData); console.log("followersData : ", followersData); const loadMoreFollowers = useCallback(() => { setFollowersLimit((prev) => prev + 3); }, []); const loadMoreFollowings = useCallback(() => { setFollowingsLimit((prev) => prev + 3); }, []); useEffect(() => { if (!(me && me.id)) { Router.push('/'); } }, [me && me.id]); if (!me) { return '내 정보 로딩중'; } if (followingError || followerError) { console.error(followerError || followingError); return '팔로잉/팔로워 로딩 중 에러가 발생했습니다.'; } if (!followingsData || !followersData) { return '팔로잉 데이터 로딩중...'; } return ( <> <Head> <title>내 프로필 | NodeBird</title> </Head> <AppLayout> <NicknameEditForm /> <FollowList header="팔로잉" data={followingsData} onClickMore={loadMoreFollowings} loading={!followingError && !followingsData} /> <FollowList header="팔로워" data={followersData} onClickMore={loadMoreFollowers} loading={!followerError && !followersData} /> </AppLayout> </> ); }; export const getServerSideProps = wrapper.getServerSideProps(async (context) => { console.log(context.req.headers); const cookie = context.req ? context.req.headers.cookie : ''; axios.defaults.headers.Cookie = ''; if (context.req && cookie) { axios.defaults.headers.Cookie = cookie; } context.store.dispatch({ type: LOAD_USER_REQUEST, }); context.store.dispatch(END); await context.store.sagaTask.toPromise(); }); export default Profile; import React, { useState } from "react"; import PropTypes from "prop-types"; import { List, Card, Button } from "antd"; import { StopOutlined } from "@ant-design/icons"; import { useSelector, useDispatch } from 'react-redux'; import { UNFOLLOW_REQUEST, REMOVE_FOLLOWER_REQUEST } from '../reducers/user'; const FollowList = ({ header, data, onClickMore, loading }) => { const dispatch = useDispatch(); if (!data) { return "데이터 로딩중"; } const onCancel = (id) => () => { if (header === '팔로잉') { dispatch({ type: UNFOLLOW_REQUEST, data: id, }); }else{ dispatch({ type: REMOVE_FOLLOWER_REQUEST, data: id, }); } }; console.log("data : ", data); return ( <> <h4>{header}</h4> <div style={{ display: "flex", justifyContent: "space-between", flexWrap: "wrap" }}> {data && data.map((v) => { return ( <Card style={{ width: "30%" }} actions={[<StopOutlined key="stop" />]} onClick={onCancel(v.id)}> <Card.Meta description={v.nickname} /> </Card> ) })} <Button block loading={loading} onClick={onClickMore}>더보기</Button> <br /><br /> </div> </> ); }; FollowList.propTypes = { }; export default FollowList;
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
마지막 SMOTE 이후 LGBMClassifier 학습하고 평가할 때
선생님~ SMOTE 방식으로 오버샘플링을 한 이후로는서 학습데이터의 레이블 데이터 값 분포가 균일 해져서 boost_from_average=True로 하고 한번 해봤는데요~ (강의에서는 False로 그냥 진행되었었음) 재현율은 똑같고.. 정밀도는 조금 낮아졌지만, ROC_AUC는 좀더 높아졌네요.. 오버샘플링(혹은 언더샘플링)을 해서 학습데이터의 레이블데이터의 값분포를 균일하게 맞춰주게 되면 boost_from_average=True 로 하는 걸 더 권장하시나요~? 아니면 False로 하는 걸 더 권장하시나요..?