• 북마크
  • 추가메뉴
어디로 앱에서 쉽고 간편하게!
애플 중고 거래 전문 플랫폼
오늘 하루 보지 않기
KMUG 케이머그

소프트웨어

[App 개발] objective-C 에 관련된 질문입니다. 도와주세요~~~~

본문

objective-C 에 관련된 내용 두가지만 질문드리고 싶습니다.

1. NSTextView에 수치 결과를 나열하는 과정에서 "\\t" 을 사용하여 표현하고 싶은데, 이게 어느 길이 이상이 초과되면 "\\n"을 사용하지 않았는데도 스스로 줄바꿈이 되버버립니다. 자동 줄바꿈이 되지 않는 방법이 없을까요?

2. 배열의 크기를 변수에 연동하여 정의하는 방법을 잘 모르겠습니다.

간단한 예문을 아래에 실었습니다.
예를 들어 exam.h 파일에 다음과 같이 정의하고 싶습니다.


exam.h : ======================================================
#import <Cocoa>
@interface exam: NSObject {
    IBOutlet NSTextView *textField;
    int ni, nj;
    NSString *temp;
}
- (IBAction)actAnalysis:(id)sender;
- (void)mainFrame;
===============================================================


exam.m : ======================================================
#import "exam.h"
@implementation exam

-(id)init {
    [super init];
    [self mainFrame];
    return self;
}

- (void)mainFrame {
    ni=12, nj=12;
    float xi[ni];
    float xj[nj];
}

- (IBAction)actAnalysis:(id)sender {
    int i,j;
    temp = @"";
    for (i=1; i<=ni; i++) {
        for (j=1; j<=nj ;j++) {
            xi[i] = i-1;
            xj[j] = j-1;
            float pock = (xi[i]/xj[j]) * 100.0;
            temp = [NSString stringWithFormat:@"%@\\t%f", temp, pock];
        }
        temp = [NSString stringWithFormat:@"%@\\n", temp];
    }
    [textField setString:temp];
}
===============================================================

이렇게 코드가 되었을 때, xi[i] = i-1; xj[j] = j-1;부분에서 다음과 같은 에러가 발생합니다.
"error:'xi' undeclared(first use in this function)"

제가 원하는 것은 배열 xi[ni], xj[nj]를 선언하는 것인데,
문제는 xi, xj가 모든 메서드에서 인식이 되어야 하고, 실제 ni, nj 값은 exam.m에서 정의된다는 점입니다.
어떻게 하면 에러 없이 해결할 수 있을지 조언 부탁드립니다.

그리고 1번 질문처럼
temp = [NSString stringWithFormat:@"%@\\t%f", temp, pock];
문장에서 \\t 를 사용하면 일정한 폭이 되면 자동으로 줄바꿈이 되어버립니다.
살펴보니 NSTextview에 tab 설정이 제한되어 있는것 같습니다.
이걸 어떻게 풀어야 할지 모르겠습니다.
그리고 서식을 예를들어 소숫점 포함하여 10자리만을 표현하고자 하면 어떻게 할지도 궁금합니다.
예를 들어 1234.567890 또는 0.364826472 또는 23.12462300 이렇게요~~
%0.4f 형식으로 하면 소숫점자리는 4자리로 고정시키는것은 다른 분의 도움으로 알았는데 전체 수갯수를 고정하는 방법을 알고 싶습니다. ^^
0 0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 8,141
가입일 :
2003-11-14 00:04:53
서명 :
미입력
자기소개 :
미입력

최신글이 없습니다.

최신글이 없습니다.

댓글목록 2

hongjuny님의 댓글

일단 xi 와 xj 배열이 mainFrame 메쏘드 안의 자동변수로 선언되었고, 이것은 스택에 선언된 변수이며, 따라서 메쏘드에서 리턴하면 사라져 버리는 배열입니다. 다른 메쏘드에서 억세스하려고 하면 선언되지 않았다고 나오는 것은 당연하겠지요.

위 배열을 클래스 내에서 모두 억세스 하시려면 클래스 멤버로 선언하시거나 글로벌 변수로 선언하셔야 하겠습니다.

그리고, 배열 길이를 저렇게 변수에 넣고 선언이 되던가요? C 를 야메로 배워서 그런지 가끔 헛갈립니다. -_-;

애니웨이, ni 와 nj 가 변수이고, 그 값에 따라 배열 길이가 달라지는 것으로 이해하였을 때, C 적인 방법과 C++ 적인 방법을 말씀드리자면...

C 적인 방법: malloc 을 쓴다.
C++ 적인 방법: new / delete 를 쓴다.

가 당장은 딱 떠오르는군요. 다 아실만한 내용을 반복한 건가요? -_-;;;

BlueTiger님의 댓글

Objective-C에서는 new/delete가 안될겁니다.
malloc을 쓰셔야 하구요.
ni, nj 는 hongjuny님 말씀대로 클래스 멤버로 선언하셔야 겠죠.
선언 하실때는 float *ni; float *nj; 이런식으로 포인터로 하셔야 하고요.

코코아스럽게 하실려면 NSNumber와 NSArray(or NSMutableArray)를 사용하실 수도 있습니다.

마지막으로 실수를 정해진 글자수 만큼만 표현하고 싶으시다면

NSString *numstr = [NSString stringWithFormat:@"%f",num];

if([numstr length] > 10)
numstr = [numstr substringToIndex:10];

이런식으로 하면 되지않을까 싶습니다.

* 답글에선 들여쓰기가 안되는 군요...ㅡ,.ㅡ;;

전체 2 건 - 1 페이지
2008.07
25

[App 개발] 맥에서 mysql 사용시 한글 깨짐문제 질문드립니다.

인터넷과 몇몇 포럼에 문의하며 이래저래 바꾸어보아도 도저히 해결되지않아서 여기에도 질문을 드립니다. ㅠㅠ 우선 mysql 5.1버전을 dmg파일로 받아서 설치했습니다. 그리고 cocoaMySql도 설치했습니다. 기본적인 명령어는 잘 실행…

2008.05
03

열람중 [App 개발] objective-C 에 관련된 질문입니다. 도와주세요~~~~

objective-C 에 관련된 내용 두가지만 질문드리고 싶습니다. 1. NSTextView에 수치 결과를 나열하는 과정에서 "\\t" 을 사용하여 표현하고 싶은데, 이게 어느 길이 이상이 초과되면 "\\n"을 사용하지 않았는데도 스스로 줄바꿈이…