예전 노래는 귀한 사람들만 즐겼던 특권같은 걸까나?
클래식같은 건 그렇지 않았겠어요?
아니래도 말고요~
항상 멋진 음악을 듣고 지내니 항상 귀족같은 마음이 들어요.



매일 돈, 돈 거리긴 하지만 기분은 풍족해요.
그렇게 풍족한 기분은 다 노래 때문…
가슴을 잔뜩하게 하는 뮤직을 들어보도록 할까요?
괜찮은 노래 한가지 알려드릴게요.
음, 감상해봅시다.
지금 감상할 한편의 뮤비는 새드 스토리 겨울에 이별하다
같이 들어볼까요?,



컴퓨터가 말썽을 부리더라고요. 청소했답니다.
쓱싹쓱싹- 성실히 청소를 했습니다.
먼지들이 자안뜩 쌓인 컴퓨터 앞에 앉아서는
저도, 컴퓨터도 얼마나 고생했을까요?
먼지들이 컴퓨터 고장의 주범이라면서요?
본체를 뜯어내는 게 조금 두려웠지만
기분좋은 컴퓨터 생활을 위하여 두려움을 참았어요.
그저 뚜껑만 열면 되는 거였네? 별거 없다니 다행….
그렇게 뚜껑을 열고난 다음 청소를 시작했답니다.
징그러울 정도로 먼지들이 가득있어서 진짜 너무 놀랐어요.


이래서 컴퓨터가 자꾸 꺼지고 말썽이었군…
하면서 마른걸레로 아주 조금씩 그 부분을 닦았습니다.
뭐하나 잘못 건드릴까 봐 노심초사하면서 닦았습니다.
그런데 이제는 약간 익숙해지니 할만하더군요?
구석구석 청소하는 와중에
뮤직을 한 곡 틀어서 작업을 시작했죠.
능률이 쭉쭉 오르더군요.
나중엔 뮤직에 도취해서 걸레가 마이크가 되버렸답니다.


원래 목적을 잃어버리고 노래에 빠져있다가
다시 한번 현실로 돌아와 열심히 컴퓨터 청소를 했습니다.
휴~ 되게 재밌었던 작업 같았습니다.
이렇게 청소가 완료되었답니다.
진짜 뿌듯하더라고요. 다시 조립하는데 손이 후들후들-
ㄷㄷㄷ 떨리긴 했지만 나름 잘 조립했답니다.
컴퓨터를 키니까 멀쩡하게 잘 구동되는 컴퓨터!


진짜 뿌듯해서 정말로 방 안을 뛰어다녔던 거 같아요.
나도 진짜 골빈애 같죠?
ㅎㅎㅎ 이젠 꺼질 위험 없는 색다른 컴퓨터로 탄생했어요.
먼지 청소는 정말 자주 해야 할 것 같더라고요.
뮤직 한 곡과 같이 오늘은 컴퓨터 청소해보세요.

웹으로 만든 사이트를 Xcode를 이용해 webview와 툴바를 붙여보자.


먼저 Window-based Application 탬플릿을 선택하여 프로젝트를 생성한다.


Resources에 있는 MainWindow.xib 파일을 더블클릭해 Window 창에 Libray에서 


Web view와 Toolbar를 배치한다.


익숙하지 않은 사람들은 동영상을 참조하여 작성하자.


참조 동영상은 2009년에 만들어 진거라 버전이 틀리기 때문에 어떻게 만들어 지는지 흐름만 익히자.


동영상을 참조하여 MainWindow.xib 파일이 완성되면 Classes 밑에 있는 h파일과  m파일을 수정한다.


1. h 파일 예제 


#import <UIKit/UIKit.h>


@interface WebAppDelegate : NSObject <UIApplicationDelegate> {

    IBOutlet UIWindow *window;

    IBOutlet UIWebView *webView;

    UIToolbar *toolbar;

}


@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet UIWebView *webView;


@end


2. m 파일 예제

#import "WebAppDelegate.h"


@implementation WebAppDelegate


@synthesize window;

@synthesize webView;


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    NSURL *url=[NSURL URLWithString:@"http://www.daum.net"];

NSURLRequest *requst=[NSURLRequest requestWithURL:url];

[webView loadRequest:requst];

[window makeKeyAndVisible];

   

return YES;

}



- (void)dealloc {

    [window release];

[webView release];

    [super dealloc];

}



@end


완료 되면 모두 저장하고 컴파일 후 실행하면 완료 .... ㅋㅋ 





-푸쉬  서버  개발  관련 자료-
이지 APNS 오픈 소스 라이브러리
http://www.easyapns.com/
구글 코드 APNS 오픈 소스
http://code.google.com/p/apns-php/
서버 튜토리얼
http://blog.boxedice.com/2009/07/10/how-to-build-an-apple-push-notification-provider-server-tutorial/


-label이나 textView에 현재 시간을 표시하고 싶습니다-
NSDate *t = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSString *timeStr = [formatter setDateFormat:@"HH:mm:ss"];
myLabel.text = timeStr;
...
[textView scrollRangeToVisible:NSMakeRange([textView.text length]-1, 1)];


-시뮬레이터 포토 라이브러리 자신의 이미지 추가 방법-
UIImage * sShot = [UIImage imageNamed:@"imageName.jpg"];
UIImageWriteToSavedPhotosAlbum(sShot, nil, nil, nil);


-네이게이션바 스타일 바꾸기-
http://cafe.naver.com/mcbugi/1241


-이미지 자르기 함수를 소개합니다. (UIImage)-

- (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
{
CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return cropped;
}
http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/


-HTTP 라이브러리-
http://allseeing-i.com/ASIHTTPRequest/How-to-use


-json 관련-
라이브러리 http://code.google.com/p/json-framework/
json 투토리얼 http://iphonedevelopertips.com/networking/iphone-json-flickr-tutorial-part-1.html



-푸쉬서버 구현을 위한 서버 인증서 pem 만들기-
애플 개발자 센터 apps ID 추가 (이때 와일드카드(*)는 사용하면 안됨)

키체인에서 개인 인증서 하나 만들어 애플 개발 센터에 등록

애플 개발센터에서 cert파일을 다운받아서 키체인으로 추가

키체인에서 내보내기로 p12파일로 저장

커맨드에서  p12파일을 pem파일로 변환
openssl pkcs12 -in quizers_dev_cert.p12 -out quizers_dev_cert.pem -nodes -clcerts



-JSON 2중 뎁스 이상 키 접근하기-
NSDictionary*feed =[self downloadPublicJaikuFeed];
// get the array of "stream" from the feed and cast to NSArrayNSArray*streams =(NSArray*)[feed valueForKey:@"stream"];
// loop over all the stream objects and print their titlesint ndx;
NSDictionary*stream;
for(ndx =0; ndx < stream.count; ndx++){
        NSDictionary*stream =(NSDictionary*)[streams objectAtIndex:ndx];
        NSLog(@"This is the title of a stream: %@", [stream valueForKey:@"title"]); 
}



-NSString 클래스를 이용하여 문자을 넣자니 유니코드를 받아 초기화-
-(NSUInteger) UnicharLength:(const unichar*)str
{
unichar* pStr = (unichar*)str;
for( ; pStr[0] != nil ; pStr++ );
return (NSUInteger)(pStr - str);
}
[[NSString alloc] initWithCharacters:(원본문자열) length:[self UnicharLength:(원본문자열)]];


-랜덤 출력-
srandom(time(NULL));
value = random() % 100;
위처럼 하시면 0~99사이의 한수를 리턴합니다.
srandom(time(NULL)); 는 첨에 한번만 해주시면 됩니다.


-Code Sign error: Provisioning profile이 맞지 않을 때 변경 방법-
여러 장비에서 작업을 하거나 여러 프로젝트를 진행 중에 변경된 Provisioning profile이 적용되지 않아 Debug를 할 때 ”Code Sign error: Provisioning profile ‘3E6AA725-6534-46F8-B9CE-D19AC9FD854B’ can’t be found” 이런 오류가 발생하는 경우가 있는데요. 이럴 때 현재 사용중인 Provisioning Profiles로 프로젝트 세팅을 변경해주는 방법을 소개한 글(원문)이 있어서 공유합니다.

1. 실행중인 Xcode Project를 닫습니다.
2. Finder에서 프로젝트 폴더로 이동합니다.
3. 프로젝트 .xcodeproj 파일 선택하고 마우스 오르쪽 키를 눌러 '패키지 내용 보기'를 선택합니다.
4. 패키지 내용 보기를 통해 패키지 안에 있는 project.pbxproj 파일을 Xcode로 불러옵니다.
5. 검색을 통해 PROVISIONING_PROFILE 부분을 찾아 변경된 Provisioning profile 로 변경해줍니다.
6. 현재 Provisioning profile을 확인하려면 Organizer 창을 열어보면 알 수 있습니다.
7. Window > Organizer로 Organizer 창을 열고 왼쪽에 IPHONE DEVELOPMENT > Provisioning Profiles로 이동합니다.
8. 오른쪽에 있는 Profile Identifier를 복사해서 변경해주면됩니다.
9. 변경이 끝나면 project.pbxproj 저장하고 프로젝트를 열어 테스트합니다.


-아이폰 웹개발에서 디바이스 아이디 가져올수있나요?-
[[UIDevice currentDevice] uniqueIdentifier];




-상태바 제어-
안 보이게
[UIApplication sharedApplication].statusBarHidden = NO;



-D-Day 구하기-
NSDate* date  = [NSDatedateWithNaturalLanguageString:@"2010-06-30"];
NSDate* d_day = [NSDatedateWithNaturalLanguageString:@"2010-12-31"];

NSDateComponents *dcom = [[NSCalendar currentCalendar]components: NSDayCalendarUnit
fromDate:date  
  toDate:d_day  
  options:0];

NSLog(@"day=%d",   [dcom day]);   // 184




-UIView Animation 강제종료-

[UIView setAnimationsEnabled:NO];


-개발 완료, 베타 테스팅용 Ad Hoc 배포-
http://cafe.naver.com/mcbugi/9042


-테이블뷰에 원격이미지를 넣을경우 스크롤이 느려지는 현상-
LazyTableImages 샘플 http://developer.apple.com/iphone/library/samplecode/LazyTableImages/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009394
AsyncImageView 클래스 http://www.markj.net/iphone-asynchronous-table-image/


-테이블 뷰 섹션별로 이름 주기-
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if( section == 0 ) {
return@"발행한퀴즈";
} elseif( section == 1 ) {
return@"참여한퀴즈";
} else {
return@"진행중인퀴즈";
}
}


-정사각형으로 사진을 CROP 하고, 썸네일 크기에 맞게 리사이즈-
먼저, 출처는 다음 기사입니다.
http://tharindufit.wordpress.com/2010/04/19/how-to-create-iphone-photos-like-thumbs-in-an-iphone-app/ 
 
iPhone 사진앨범의 특징은 가로나 세로가 긴 이미지라 할지라도,
정사각형으로 사진을 CROP 하고, 썸네일 크기에 맞게 리사이즈 시킵니다.
 
위의 기사의 내용을 나름대로 보기 편하게(?) 수정을 했습니다.
 
함수명 - makeThumbnailImage
파라미터 - 원본 이미지, 리사이즈없이 CROP만 할지 여부, 리사이즈할 정사각형 한변의 길이
리턴값 - CROP 및 리사이즈된 이미지
 
- (UIImage*) makeThumbnailImage:(UIImage*)image onlyCrop:(BOOL)bOnlyCrop Size:(float)size
{
 CGRect rcCrop;
 if (image.size.width == image.size.height)
 {
  rcCrop = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
 }
 else if (image.size.width > image.size.height)
 {
  int xGap = (image.size.width - image.size.height)/2;
  rcCrop = CGRectMake(xGap, 0.0, image.size.height, image.size.height);
 }
 else
 {
  int yGap = (image.size.height - image.size.width)/2;
  rcCrop = CGRectMake(0.0, yGap, image.size.width, image.size.width);
 }
 
 CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rcCrop);
 UIImage* cropImage = [UIImage imageWithCGImage:imageRef];
 CGImageRelease(imageRef);
 if (bOnlyCrop) return cropImage;
 
 NSData* dataCrop = UIImagePNGRepresentation(cropImage);
 UIImage* imgResize = [[UIImage alloc] initWithData:dataCrop];
 
 UIGraphicsBeginImageContext(CGSizeMake(size,size));
 [imgResize drawInRect:CGRectMake(0.0f, 0.0f, size, size)];
 UIImage* imgThumb = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 [imgResize release];
 return imgThumb;
}


-사진찍을때  아래에서  올라오는  메뉴 UIActionSheet-
http://ykyuen.wordpress.com/2010/04/14/iphone-uiactionsheet-example/


-이미지  슬라이드  샘플-
http://lievendekeyser.net/index.php?module=messagebox&action=message&msg_id=1351


-커버플로우  라이브러리-
http://apparentlogic.com/openflow/



-객체 타입 비교-
if ( [a isKindOfClass:b] )


-문자열 비교-
NSString *strText = idField.text;
if([srText isEqualToString:@"mihr01"])
....
else if([srText isEqualToString:@"mihr02"])
....
else
...
이렇게 하셔도 되고요 완전 같은 스트링이 아니라
 
포함된것을 찾으려면
if([strText rangeOfString:@"mihr01"].length) 


-탭뷰에 스타일시트를 붙일때-
UIActionSheet *popupQuery = [[UIActionSheetalloc]
initWithTitle:nildelegate:self
cancelButtonTitle:@"취소"
destructiveButtonTitle:nil
otherButtonTitles:@"사진찍기", @"기존의사진선택", nil];
popupQuery.actionSheetStyle = UIActionSheetStyleBlackOpaque;
QuizersAppDelegate *appDelegate = (QuizersAppDelegate *)[[UIApplicationsharedApplication] delegate];
[popupQuery showInView:appDelegate.window];


-스크롤  밀어서  데이터  리플래쉬  하기-
소스코드
http://github.com/facebook/three20/tree/master/samples/TTTwitter/
설명
http://www.drobnik.com/touch/2009/12/how-to-make-a-pull-to-reload-tableview-just-like-tweetie-2/


-네트워크  연결  됐는지  확인 Reachability-
http://www.raddonline.com/blogs/geek-journal/iphone-sdk-testing-network-reachability/
http://theeye.pe.kr/entry/how-to-check-network-connection-on-iphone-sdk





-크랙 방지 클래스-
http://cafe.naver.com/mcbugi/11661





-탭바 클릭시 바로 UISearchBar 클릭되도록 할려면 어떻게 해야 하나요?-
UISearchBar가 first responder가 되게 하면 됩니다.
[searchBarObj becomeFirstResponder];



-UITextField 입력값 체크하기 : 문자열 길이, 숫자여부 체크-

헤더(.h)에 UITextFieldDelegate 선언

@interface 클 래스명 : UIViewController <UITextFieldDelegate>



구현부(.m)에 다음 메쏘드를 구현하면 됨

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

//return NO하면 입력이 취소됨
//return YES하면 입력이 허락됨
//textField 이용해서 어느 텍스트필드인지 구분 가능

//최대길이

int maxLength = 128;

NSString *candidateString;

NSNumber *candidateNumber;


//입력 들어온 값을 담아둔다

candidateString = [textField.text stringByReplacingCharactersInRange:range withString:string];


if(textField == IDField) {
maxLength = 8;
} else if(textField == AgeField) {
//숫자여부 점검

//length가 0보다 클 경우만 체크
//0인 경우는 백스페이스의 경우이므로 체크하지 않아야 한다

if ([string length] > 0) {

//numberFormatter는 자주 사용할 예정이므로 아래 코드를 이용해서 생성해둬야함

//numberFormatter = [[NSNumberFormatter allocinit];

//[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];


//numberFormatter 를 이용해서 NSNumber로 변환

candidateNumber = [numberFormatter numberFromString:candidateString];


//nil이면 숫자가 아니므로 NO 리턴해서 입력취소

if(candidateNumber == nil) {

return NO;

}


//원 래 문자열과 숫자로 변환한 후의 값이 문자열 비교시 다르면

//숫자가 아닌 부분이 섞여있다는 의미임

if ([[candidateNumber stringValuecompare:candidateString] !=  NSOrderedSame) {

return NO;

}


maxLength = 2;

}

}

//길이 초과 점검

if ([candidateString length] > maxLength) {

return NO;

}


return YES;

}

http://cafe.naver.com/mcbugi/37651




-메모리 누수-
http://cafe.naver.com/mcbugi/64257


-디바이스 가로 세로 상태-
UIDeviceOrientationIsLandscape([UIDevicecurrentDevice].orientation) ?


-UITextField 에 자동 포커스 주기-
키보드 올리면서 커서를 넣을때는 아래방법을 이용하시면 됩니다.
[textField becomeFirstResponder]; 
참고로 이건 커서를 빼면서 키보드를 내리실때 사용하시면 되구요...
[textField resignFirstResponder]; 




-3.2 4.0  동영상  플레이-
http://iphonedevelopertips.com/video/getting-mpmovieplayercontroller-to-cooperate-with-ios4-3-2-ipad-and-earlier-versions-of-iphone-sdk.html


-한글완성형(EUC-KR)을 iPhone/Mac에서 사용할 수 있는 언어셋으로 변환하기-
http://blog.backpackholic.tv/160


-COCOS2D 번개 효과-
http://www.cocos2d-iphone.org/forum/topic/370


-iPhone 4.0 호환 키보드에 버튼 or 뷰 붙이기-
기존꺼에 비해 약간 수정되 었을뿐입니다....
하지만 -_-이거 찾느라 ㅠㅠ;; 

3.1.x에서는 windows 서브뷰에 항상 키보드 뷰가 있었지만 ...
4.0 부터는 windows 에 항상 있는게 아니고, 키보드를 불렀을때 -_- 붙어서 오더라고요.. 그래서

Done 버튼 붙이는 예제 입니다. (Number 패드에)

아래 액션을 Text필드의 BeginTouched 에 연결 시킵니다.
 // 키보드가 나왔을때랑 사라질때의 이벤트를 잡아냅니다.
//3.1.X 에서는 UIKeyboardWillShowNotification 으로 잡지만
// 4.0 때문에 --; DidShow로 잡아줬습니다.
//그래야 윈도우에 키보드가 있더라고요 ;;;
-(IBAction)FieldTouched{
    
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(keyboardWillShow:) 
                                                 name:UIKeyboardDidShowNotification
                                               object:nil];
    
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(keyboardWillHide:) 
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];
    
    
}

// 키보드가 나왔을때 Done 버튼 붙여주기 
- (void)keyboardWillShow:(NSNotification *)note {  
    
    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    doneButton.frame = CGRectMake(0, 163, 106, 53);
    doneButton.adjustsImageWhenHighlighted = NO;
    [doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
    [doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
    [doneButton addTarget:self action:@selector(backgroundTap:) forControlEvents:UIControlEventTouchUpInside];

    //3.1.x 와 4.0 호환 키보드 붙이기
    for( UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows] ){
        for( UIView *keyboard in [keyboardWindow subviews] ){
            NSString *desc = [keyboard description];
            if( [desc hasPrefix:@"<UIKeyboard"]==YES ||
               [desc hasPrefix:@"<UIPeripheralHostView"] == YES ||
               [desc hasPrefix:@"<UISnap"] == YES )
            {
                [keyboard addSubview:doneButton];
            }
        }
    }
    
}

// 키보드가 없어질때 Done 버튼을 삭제 합니다.
- (void)keyboardWillHide:(NSNotification *)note {  
    
    for( UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows] ){
        for( UIView *keyboard in [keyboardWindow subviews] ){
            NSString *desc = [keyboard description];
            if( [desc hasPrefix:@"<UIKeyboard"]==YES ||
               [desc hasPrefix:@"<UIPeripheralHostView"] == YES ||
               [desc hasPrefix:@"<UISnap"] == YES )
            {
                for(UIView *subview in [keyboard subviews])
                {
                    [subview removeFromSuperview];
                }
                
            }
        }
    }
}

도 움 되시길 바랍니다 ;)
http://cafe.naver.com/mcbugi/62349


-배열내 숫자 값 비교해서 정렬하기-
만약에 객체내의 인스턴스를 키로 정렬할 경우에는 NSSortDescriptor 를
쓰시면 됩니다.
아래는 name으로 정렬한 예입니다.

@interface Test :
NSObject {
NSString *name;
double distance;
}
@property
(nonatomic, retain) NSString *name;
@property double
distance;
@end

@implementation Test
@synthesize name, distance;
@end


아 래는 사용방법입니다.
       Test *t1 = [[Test alloc] init];
Test *t2 = [[Test alloc] init];
Test *t3 = [[Test alloc] init];
[t1 setName:@"마바사"];
[t2 setName:@"아자차"];
[t3 setName:@"가나다"];
[t1 setDistance:1.2];
[t2 setDistance:2.5];
[t3 setDistance:0.5];
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:t1];
[array addObject:t2];
[array addObject:t3];
[t1 release];
[t2 release];
[t3 release];
// 이름순으로 정렬
NSSortDescriptor *nameSort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(localizedCompare:)];
[array sortUsingDescriptors:[NSArray arrayWithObjects:nameSort, nil]];
[nameSort release];
for(Test *t in array) {
NSLog(@"%@ %f", [t name], [t distance]);
}
[array removeAllObjects];


------[결 과]------
2010-07-12 17:46:13.117 Sort[5070:20b] 가나다 0.500000
2010-07-12 17:46:13.125 Sort[5070:20b] 마바사 1.200000
2010-07-12 17:46:13.130 Sort[5070:20b] 아자차 2.500000


p.s. distance로 정렬하고자 한다면 
NSSortDescriptor *distanceSort = [[NSSortDescriptor alloc] initWithKey:@"distance" ascending:YES];
nameSort 대신 distanceSort를 넣으시면 됩니다.
http://cafe.naver.com/mcbugi/65873




출처- 맥부기까페
저작자 표시 비영리 변경 금지
Posted by ZΕLΙ0 0
$(document).ready(function(){ setTimeout(scrollTo, 0, 0, 1);});
자바스크립트로 실행
저작자 표시 비영리 변경 금지
Posted by ZΕLΙ0 0
HTTP의 POST를 이용한 이미지 전송이다. 간단간단해서 좋다


//XCODE상의 소스
+ (IBAction)uploadImage:(UIImage *)image:(NSString*)filename {
NSData *imageData = UIImageJPEGRepresentation(image, 90);
NSString *urlString = @"이미지전송을 위한 PHP경로";
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

NSString *boundary = [NSString stringWithString:@"0xKhTmLbOuNdArY"];  // important!!!
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n",filename] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithdata:x-imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"%@",returnString);
}

//PHP 코드

<? 
$uploaddir = './uploads/';
$file = basename($_FILES['userfile']['name']);
$uploadfile = $uploaddir . $file;

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        echo "SUCCESS";
}
?>
저작자 표시 비영리 변경 금지
Posted by ZΕLΙ0 0
 공백과 탭 제거

nowStr = [nowStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];


 공백과 탭 및 개행제거

nowStr = [nowStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];



[문자열 검색과 비교 함수]

- ( BOOL ) hasPrefix: (NSString *) string; //인자가 리시버 앞부분과일치하는지

- ( BOOL ) hasSuffix: (NSString *) string; //뒷부분

- ( NSRange ) rangeOfString: (NSString *)string; //부분문자열검색

- ( NSRange ) rangeOfString: (NSString *)string options:(NSStringCompareOptions)mask

- ( NSArray ) componentSeperateByString: (NSString *)string; //인자를토큰으로하여분리한문자열배열을만든다. split 함수를 의미

 - ( BOOL ) isEqualToString: (NSString *)string; //문자열이 동일한지 비교

- ( NSComparisonResult) compare: (NSString *) string;//문자열이 동일한지 비교

- ( NSComparisonResult) compare: (NSString *) string option: (unsigned) mask;

//문자열이 동일한지 비교 옵션추가하여 비교


옵션

[mask]

NSCaseInsensitiveSearch : 대소문자를 무시하고  문자열을 비교한다.

NSLiteralSearch : 대소문자를 구분하여  문자열을 비교한다.

NSNumericSearch : 숫자문자를 숫자  자체로 인식( Filename9.txt < Filename20.txt < Filename100.txt )  

NSBackwardsSearch : 문자열의 뒤에서 부터 문자열을 비교한다.

NSAnchoredSearch : 문자열의 시작(NSBackwardsSearch 지정시 부분과 비교대상이 일치하는지 비교한다.(hasPrefix 같음)



사용예)

대소문자 구별없이 검색 (검색어가 문자열의 위치와는 상관 없음 즉 가운데 검색어가 있어도 검색)

NSRange rSearchCity = [원본문자열 rangeOfString:검색어 options:NSCaseInsensitiveSearch];


대소문자를 구별하지 않고 문자열 앞부터 일치하는지 검색

NSRange rSearchCity = [원본문자열 rangeOfString:검색어 

                                      options:(NSCaseInsensitiveSearch | NSAnchoredSearch)]



출처 - 단비스튜디오

저작자 표시 비영리 변경 금지
Posted by ZΕLΙ0 0
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    static NSString *CellIdentifier = @"MatzipCustomCell";
    
    MatzipCustomCell *cell = (MatzipCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray * nib= [[NSBundle mainBundle] loadNibNamed:@"MatzipCustomCell" owner:self options:nil];
cell = (MatzipCustomCell*)[nib objectAtIndex:0];        
UIView *bgv = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, cell.frame.size.width)];
[bgv setBackgroundColor:[UIColor colorWithRed:1.0f green:50.0f/255.0f blue:50.0f/255.0f alpha:1.0f]];
[cell setSelectedBackgroundView:bgv];
 [bgv release];
    }
NSMutableDictionary *ary = [XMLData objectAtIndex:indexPath.row];
cell.nameLabel.text = [ary objectForKey:@"name"];
cell.numLabel.text = [NSString stringWithFormat:@"%@명 평가", [ary objectForKey:@"reviewCnt"] ];
[cell.imageView setImage:[UIImage imageNamed:@"star.png"]];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return cell;
}
임시적으로 뷰를 생성하고 색을넣은다음 그것을 셀의 선택색으로 지정한다.



Windows를 이용자이면서 iPhone 개발을 공부하고자 하는 경우, 먼저 iPhone SDK의 기본이 Objective-C를 공부해야 할 것이다. Objective-C를 OSx 환경이 아닌 windows환경에서 다음과 같은 GNUstep과 Dev-C++를 설치해 줌으로써, 간단하게 개발환경을 구축할 수 있다.

 

# GNUstep 과 DEV-C++ 설치하기

 


  1. GNUstep System (0.24.0) 다운로드 & 설치  : http://www.gnustep.org/experience/Windows.html

 


  2. GNUstep Core (0.23.1) 다운로드 & 설치 : http://www.gnustep.org/experience/Windows.html

 


  3. Dev-C++ 다운로드 & 설치 : http://sourceforge.net/projects/dev-cpp/files/Binaries/Dev-C%2B%2B%204.9.9.2/devcpp-4.9.9.2_setup.exe/download

 


  4. Dev-C++ 컴파일러 설정하기

      1) 컴파일러 추가 명령 : -lobjc -lgnustep-base -fconstant-string-class=NSConstantString -enable-auto-import!

 

 

 


      2) 링커 추가 명령 : -lobjc -lgnustep-base -fconstant-string-class=NSConstantString -enable-auto-import!

 


      3) 실행 파일에 추가

          C:\GNUstep\mingw\bin

          C:\GNUstep\bin

 


      4) 라이브러리에 추가

          C:\GNUstep\mingw\lib
          C:\GNUstep\GNUstep\System\Library\Libraries

 


      5) 인클루드에 추가

          C:\GNUstep\mingw\include
          C:\GNUstep\GNUstep\System\Library\Headers

 6) 프로젝트 생성

Empty Project로 만들고 프로젝트 설정에서 C를 반드시 선택한다.

 

 

7) 유닛 추가 

 

반드시 꼬~~~옥  main.m으로 파일 변경하여서 저장합니다.

 

 

 

 

 

 

8) 아래와 같이 소스코드 작성

#import! <Foundation/NSObject.h>

@interface HelloWorld : NSObject

- (void) hello;

@end


@implementation HelloWorld
- (void)hello
{
  printf( "hello world\n" );
}

@end

 

int main(void)
{
  id v;


  HelloWorld *hw = [[HelloWorld alloc] init];
  [hw hello];
  [hw release];
 
  system("PAUSE");
 
  return 0;
}

10) 컴파일 및 실행

 

 

 

 

출처 : 바람이 될래!
글쓴이 : 황진이 원글보기
메모 :

Cygwin 제거하는 방법

 

 

 

 

 

 

 http://blog.naver.com/whdrnr01?Redirect=Log&logNo=80014334045

 

경우에 따라 Cygwin을 자신의 시스템에서 완전히 제거해야 할 경우가 있을 수 있다. 이제부터 이미 설치되어 있는 Cygwin을 제거하는 방법에 대해서 알아보겠다.

Cygwin 제거 방법은 매우 쉽지만, 일반적인 Windows 응용 프로그램과는 달리 Cygwin은 별도의 Uninstall 프로그램을 지원하지 않기 때문에 다음과 같이 수동으로 삭제해야 한다.

  1. 프로세스 및 서비스 제거
  2. OpenSSH나 Inetd 와 같은 서비스를 설치한 경우에는 Windows Service에 등록되므로 Cygwin을 제거하기에 앞서 이를 내려 주어야 한다. 서비스를 제거하는 방법은 아주 간단하다. Cygwin상에서 cygrunsrv (cygrunsrv -R <service-name>) 툴을 이용하거나 Windows NT/2000 리소스 킷중 srvinstw.exe 나 instsrv.exe 를 이용할 수 있다.

  3. 파일 허가권 및 소유권 확인
  4. NTFS 파일시스템에서 NTSEC을 사용하고 있다면 Cygwin상의 chmod (cd / ; chmod -R 644) 명령어를 통해 원래대로 돌려야 한다. 즉, 관리자(Administrators)가 모든 권한을 갖도록 설정한다. 이 작업은 Windows 상에서도 가능하나 경험상 불가능한 경우도 있다.

  5. Windows 환경설정(변수) 수정
  6. 위의 경우와 같이 Cygwin에서 특정 서비스를 설치하거나 사용자가 직접 Windows 시스템의 환경설정(변수)를 변경한 경우 Cygwin이 설치되기 이전의 상태로 돌려야 한다.

  7. 설치 디렉토리 삭제
  8. 설치 위치가 "C:\cygwin" 이라면 탐색기와 같은 파일 관리자를 통해 해당 디렉토리를 통채로 지운다. 명령 프롬프트에서는 "rmdir /s /q C:\Cygwin"

  9. 레지스트리 삭제
  10. 레지스트리 편집기(시작→실행→regedit.exe)를 실행시켜 다음 3개의 키(key)를 삭제한다.
    "HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions"
    "HKEY_CURRENT_USER\Software\Cygnus Solutions"
    "HKEY_USERS\.Default\Software\Cygnus Solutions "

    위 2개의 키만 삭제하더라도 별 문제는 없지만 자신의 시스템에서 Cygwin의 흔적을 완전히 제거하고 싶다면 레지스트리 편집기에서 'cygwin'으로 검색하여 검색된 모든 키(key)를 삭제하면 된다.

  11. 바로가기 아이콘 삭제
  12. "C:\Documents and Settings\All Users\시작 메뉴\프로그램\Cygwin"
    "C:\Documents and Settings\All Users\바탕 화면\Cygwin"

윈도우에서 Cygwin을 깔아서 사용하면 됩니다.

 

1. Cygwin을 다운 받아 실행합니다.

setup.exe

 

 

2. 다음을 클릭합니다.

 

 

3. 다음을 클릭합니다.

 

 

 4. 다음을 클릭합니다.

 

 

5. 다음을 클릭합니다.

 

 

 6. 다음을 클릭합니다.

 

 다른 사이트 클릭하면 시간 걸리고 ftp.kaist.ac.kr을 선택합니다.

 

7. Objective C를 사용하기 위해서 Devel에서 gcc4-core,gcc-4g++,gcc4-objc 를 반드시 선택합니다.

 

 

 

 8. 설치완료 후 Cygwin을 실행하여 노트패드 등으로 아래와 같이 편집합니다.

#import! <stdio.h>

int main( int argc, const char *argv[] ) {
    printf( "hello world\n" );
    return 0;
}

 

그리고 파일을 hello.m으로 저장합니다.

 

9. 컴파일을 합니다.

 

 

10. 실행해 봅니다.

 

 

 

프로그램의 시작 hello world 성공~~~

이제 열심히 공부하는 일만 남은건가 쩝...

 

출처 : 바람이 될래!
글쓴이 : 황진이 원글보기
메모 :

+ Recent posts