2013-04-25 32 views
0

我試圖在視圖之間傳遞一個自定義類。我已經設置屬性爲類,但是當我訪問屬性,這些屬性總是返回null:iOS/iPhone - 在視圖之間傳遞自定義對象。對象返回始終爲空

firstview.m:

- (void)initNextEventView{ 
NSDate *eventDate = [eventDatePicker date]; 
NSString *eventName = eventNameTextfield.text; 

LocateEventViewController *locView = [[LocateEventViewController alloc]init]; 
locView.eventDTO.name = eventName; 
locView.eventDTO.date = eventDate; 

[[self navigationController] pushViewController:locView animated:YES]; 
} 

LocateEventVC.h(2視圖):

@interface LocateEventViewController : UIViewController<MKMapViewDelegate, UISearchBarDelegate, BSForwardGeocoderDelegate> 
@property (strong, nonatomic) IBOutlet UIImageView *imageBackground; 
@property (strong, nonatomic) EventDTO *eventDTO; 

所以當我登錄的一個屬性eventDTO返回null ..

任何幫助將是偉大的

編輯1(2。視圖): 那我怎麼登錄:

NSLog(@"name on 2. view: %@", eventDTO.name); 
self.eventDTO.place = tmpEventPlace; 
// init friends view! 

//passing to next view 
EventMembersViewController *members = [[EventMembersViewController alloc]init]; 

members.eventDTO = self.eventDTO; 

EventDTO.h

@interface EventDTO : NSObject 

@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) UserDTO * creatorIsAppUser; 
@property (nonatomic, retain) ContactDTO * creatorIsNotAppUser; 
@property (nonatomic, retain) NSString * description; 
@property (nonatomic, retain) NSDate * date; 
@property (nonatomic, readwrite) NSInteger *eventID; 
@property (nonatomic, retain) CustomPlacemark * place; 
@property (nonatomic, retain) NSMutableArray *invitedMembers; 
@property (nonatomic, retain) NSMutableArray *acceptedMembers; 


- (NSNumber*)getLatidude; 
- (NSNumber*)getLongitude; 

EventDTO.m

@synthesize place, date, eventID, name, acceptedMembers, description, invitedMembers; 


- (NSNumber*)getLatidude{ 
    return [NSNumber numberWithDouble:place.coordinate.latitude]; 
} 

- (NSNumber*)getLongitude{ 
    return [NSNumber numberWithDouble:place.coordinate.longitude]; 
} 

回答

0
LocateEventViewController *locView = [[LocateEventViewController alloc]init]; 
locView.eventDTO.name = eventName; 
locView.eventDTO.date = eventDate; 

當您啓動locView時,對象eventDTO不存在。你必須在那裏發起一個新的事件DTO,例如:

LocateEventViewController *locView = [[LocateEventViewController alloc]init]; 
YourClass *eventDTO = [[YourClass alloc] init]; 
locView.eventDTO = eventDTO; 
locView.eventDTO.name = eventName; 
locView.eventDTO.date = eventDate; 

或直接在您的LocateEventViewController-init方法通過增加

-(id)init { 
... 
self.eventDTO = [[YourClassHere alloc] init]; 
... 
} 
+0

謝謝..它做到了...... ty。但我想知道爲什麼?爲什麼我不需要初始化一個NSSTring例如? – SaifDeen 2013-04-25 19:53:04

+0

您可以通過多種方式初始化字符串。其中之一就是做如下的事情:'NSString * myString = @「Hello,World!」;'。我假設你做了一些像SomeViewConroller.someString = @「Hello,Universe」;'。因此,通過向屬性添加@String,它可以同時初始化。這是一個非常短暫的,但我應該可以理解的。 – Philip 2013-04-25 19:55:15

+0

btw感謝所有的快速回復..愛那個地方<3 – SaifDeen 2013-04-25 19:56:36

0

請看到這個帖子更全面的解釋。總之,你要它錯了:

Passing Data between View Controllers

+0

和我一樣的......它正在與一個字符串屬性..但不與類。這個類是NsManagedObject的一個子類。這可能是問題嗎? – SaifDeen 2013-04-25 19:30:50

+0

可能。您必須發佈所有代碼才能確定。包含在該鏈接中的數據應該讓你朝着正確的方向前進。 – Jordan 2013-04-25 19:33:29

+0

sry我錯了..它是一個正常的NSObject .. – SaifDeen 2013-04-25 19:41:34

0

你確定財產eventDTO正在訪問eventNameeventDate之前設置或分配的?

我的猜測是eventDTO本身是零。在Objective-C中允許調用方法或訪問nil對象的屬性。它不像在C++或Java中那樣崩潰,它只是不做任何事情,並且如果ht方法具有返回值,則返回nil

+0

我必須嗎?它的一個屬性,我認爲他們不需要分配... – SaifDeen 2013-04-25 19:44:17

0

我猜eventDTO屬性沒有正確初始化,它本身是nil

將消息發送到nil在Objective-C中是合法的,它只是靜默地失敗並返回nil。在學習Objetive-C時,這是一個常見的陷阱。訪問屬性只是發送消息的語法糖。

順便說一句,在Objective-C 「空對象」 是由nil,不nullNULLNO表示,雖然它們都是零。

+0

我如何正確初始化它? – SaifDeen 2013-04-25 19:36:49

+0

在'LocateEventViewController'的'-init'方法中添加一行,如'self.eventDTO = [[EventDTO alloc] init];''。 – leafduo 2013-04-25 19:45:07