2012-01-08 3 views
-3

안녕하세요. iOS 4.3.3 및 다운로드 한 Xcode 4.2.1 및 iOS SDK 5보다 더 나은 앱을 만들었습니다. 탐색 기반 응용 프로그램이며 tableview에 대한 가변 배열이 있습니다. 배열에 대한 문자열을 만들지 않아서 viewdidload에 배열에 객체를 추가했지만 작동하지 않습니다! 그래서 배열에있는 객체에 NSlog를 추가했는데 null이라고 말합니다! 어떻게해야합니까?iOS 5 SDK 코드 변경 가능 어레이

- (void)viewDidLoad 
    { 
    [super viewDidLoad]; 
    self.soldc = [NSMutableArray arrayWithCapacity:0]; 
    self.color = [NSMutableArray arrayWithCapacity:0]; 
    appdelegate = (yard_sale_managerAppDelegate *)[[UIApplication sharedApplication]   delegate]; 
    appdelegate.object = self; 
    NSMutableArray *loadi = [[NSMutableArray alloc]initWithCapacity:0]; 
    self.items = loadi; 
    self.sold = [NSMutableArray arrayWithCapacity:0]; 
    self.prices = [NSMutableArray arrayWithCapacity:0]; 

    alert = [[UIAlertView alloc] initWithTitle:@"Add product" message:@"Enter your product name and price." delegate:self cancelButtonTitle:@"Add" otherButtonTitles:@"Cancel", nil]; 
    [alert addTextFieldWithValue:@"" label:@"name"]; 
    [alert addTextFieldWithValue:@"" label:@"price"]; 
    add = [alert textFieldAtIndex:0]; 
    add.keyboardType = UIKeyboardTypeAlphabet; 
    add.keyboardAppearance = UIKeyboardAppearanceAlert; 
    add.autocapitalizationType = UITextAutocapitalizationTypeWords; 
    add.autocorrectionType = UITextAutocorrectionTypeNo; 
    add2 = [alert textFieldAtIndex:1]; 
    add2.keyboardType = UIKeyboardTypeNumberPad; 
    add2.keyboardAppearance = UIKeyboardAppearanceAlert; 
    add2.autocapitalizationType = UITextAutocapitalizationTypeWords; 
    add2.autocorrectionType = UITextAutocorrectionTypeNo; 
    NSLog(@"%i", [color count]); 
    alert.tag=1; 
    self.resa = [[UIAlertView alloc] initWithTitle:@"Sale results" message:@"temple" delegate:self cancelButtonTitle:@"Close" otherButtonTitles: nil]; 
    self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 
    self.prices = [NSMutableArray arrayWithContentsOfFile:[self pricesp]]; 
    self.sold = [NSMutableArray arrayWithContentsOfFile:[self soldp]]; 
    self.soldc = [NSMutableArray arrayWithContentsOfFile:[self soldcp]]; 
    self.color = [NSMutableArray arrayWithContentsOfFile:[self colorsp]]; 
    if ([self.soldc count]==0) { 

    } 
    //self.soldc = [NSMutableArray arrayWithContentsOfFile:[self soldcp]]; 
    self.color = [NSMutableArray arrayWithContentsOfFile:[self colorsp]]; 
    [loadi release]; 
    self.resa.tag = 2; 
    [self.items addObject:@"chair"]; 
    [self.prices addObject:@"30"]; 
    [self.color addObject:@"0"]; 
    NSLog(@"%@",self.items); 
} 

이 더 필요하면 정보를 말해 :

는 여기에있는 viewDidLoad입니다!

2012-01-08 21:31:13.409 yard sale manager[1152:f803] 0 
2012-01-08 21:31:13.411 yard sale manager[1152:f803] (null) 

편집 : 이 로그 인이 그 중요한 읽어 !!!!! 많은 사람들이 코드 조각을 알지 못했습니다 : [self.items addObject : @ "chair"];
[self.prices addObject : @ "30"]; [self.color addObject : @ "0"]; NSLog (@ "% @", self.items);

+2

당신은 당신이하는 일에 대해 가장 안 좋은 생각을 가지고 있지 않습니다. 'viewDidLoad'의 마지막 부분에서 필드를 업데이트하는 것이 좋을까요? 그리고'arrayWithContentsOfFile'가 nil을 리턴 할 수 있다는 것을 알고 있습니까? –

답변

1

이 줄

self.color = [NSMutableArray arrayWithCapacity:0]; 

인스턴스화 하늘의 배열을 할당, 당신은 따라서에 0 수를 아무것도 추가하지 마십시오. 그런 다음이 줄

self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 

아마 원인이다. [self itemsp]NSArray으로 파싱 할 수있는 파일을 가리키는 유효한 파일 경로를 반환합니까?

이 코드에는 다른 많은 문제가 있습니다.


업데이트

이 줄

self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 

nil를 반환해야합니다. 그것은

NSLog(@"%@", self.items); 

가 어떻게 당신이 (null)을 받고 있기 때문에이 가정을 만드는 중이라서 이유는

이 가정을 만들 수 있습니다 직선 후에이 줄을 추가하여

확인합니다. niladdObject:으로 전화하면 nil이 반환되며 아무 작업도하지 않습니다. myArrayNSMutableArray에 대한 포인터를 보유하고

NSMutableArray *myArray = nil; 

[myArray addObject:@"Test"]; 

NSLog(@"%@", myArray); 

// => 2012-01-08 20:54:04.708 Untitled[4199:707] (null) 

해서이 조각에서 볼 수 있듯이 그것은 당신이 실제로 하나를 가질 것을 의미하지 않는다.

self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 

[NSMutableArray arrayWithContentsOfFile:[self itemsp]]는 다음과 NSLog(@"%@",self.items); 인쇄 (null)self.items있는 NSMutableArray가 생성되지 않습니다 있다는 점을 감안

+0

나는 코드의 유일한 부분을 말했고 경로는 다음과 같다 : - (NSString *) itemsp { NSString * path = [NSString stringWithFormat : @ "% @ % @", [[NSBundle mainBundle] resourcePath], @ "items.plist"]; 그리고 색상을 나중에 추가하고 추가하지 않습니다 ... 그리고 더 많은 정보가 필요하면 그냥 내게 당신이 필요하고 내가 그것을 게시 할 것입니다 말해 줘서 내 질문을 추가하지 않습니다 배열과 뭐죠? – Matan

+0

그것은 실제로 유효한 경로를 반환하는지 여부와 NSArray 파일을 구문 분석 할 수 있는지 여부를 대답하지 않습니다. –

+0

예 : [self.items writeToFile : [self itemsp] atomically : YES]; 그 백업 시스템 – Matan

0

nil을 반환 의미 :

따라서 당신이 self.items에 할당 한 마지막 시간입니다.

self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 

반환 nil을 경우 발생할 수있는 유일한 방법은 그 경로에 아무것도 없다 아마 때문에, 아무것도 읽지 않습니다이다입니다.

는 NSLog self.items 바로 문 뒤에 :

self.items = [NSMutableArray arrayWithContentsOfFile:[self itemsp]]; 

당신이 작동하지 않습니다 응용 프로그램 번들에 쓰기를 시도하는 경우는 샌드 박스 문서 디렉토리와 같은 디렉토리를 작성해야합니다.

+0

그 경로는 내가 알고있다. 시뮬레이터를 5에서 4.3으로 변경하면 내가 저장 한 코드에 추가하지 않은 일부 객체가 입력되기 때문이다. 경로에있는 파일. 그리고 그 행이 작동하지 않는 이유보다 경로가 잘못되었다고 말할 수 있습니다 : [self.items addObject : @ "chair"]; NSlog 바로 위에 어떤 객체도 추가되지 않습니까? – Matan

+2

기기에서 ** ** 제안한 NSLog에서 무엇을 얻었습니까? 기본적으로 코드가 정확하고 동시에 작동하지 않는다고 주장하고 있습니다. 두 인수 모두 옳을 수는 없습니다. – zaph

+0

나는 여전히 null이되고 나는 코드가 ios5와 호환되지 않는다고 말할 뿐이다. 아이디어가 더 있으십니까? – Matan