2009-07-20 43 views
2

將值賦給我的一個對象時出現奇怪的錯誤。盡我所能,編譯器認爲我正在分配一個只讀變量。它在myPlace.publicLocation ...行中給我「作爲賦值左操作數所需的左值」。使用對象時出現錯誤:「作爲賦值左操作數所需的左值」

我確定這是一個經典的新手錯誤 - 我在哪裏出錯?

CSPlace *myPlace; 
myPlace.publicLocation.coordinate.latitude = 
    [[separatedData objectAtIndex:0] floatValue]; 

類:

#import <CoreLocation/CLLocation.h> 
@interface CSPlace : NSObject { 
    CLLocation *publicLocation; 
} 
@property (copy, nonatomic) CLLocation *publicLocation; 
@end 
#import "CSPlace.h" 
@implementation CSPlace 
@synthesize publicLocation; 
@end 

回答

6

CLLocation一個不變類相對於經度和緯度。所以你不能修改它的緯度。你必須創建一個新的對象:

[[CLLocation alloc] initWithLatitude:latitude longitude:longitude]; 

永恆不變是具有這樣的初始化器的全部意義。

0

我沒有Objective-C的專家,但我知道這是一個C-超...所以它不應該是:

myPlace->publicLocation->coordinate.latitude

(用「 - >」代替「。」,我不知道是否爲「座標」,如果它是指針)

編輯:此外,如果您嘗試訪問未分配對象的屬性,您的程序很可能會崩潰,您的案例中的myPlace未分配。

編輯2:請參閱下面的johne的評論爲什麼我的答案應該被忽略。 (我要離開它,雖然它可能會成爲別人一天犯同樣的錯誤)

+2

ObjC2引入了一個名爲properties的新「特徵」。在必須被列爲有史以來最愚蠢的語言設計選擇之一的時候,他們選擇超載標準C'。運營商爲此目的。這不僅僅是奇怪而神祕的方式讓人難以理解,屬性既可以是l值,也可以是r值。除此之外,屬性可以是隻讀或讀寫的,這意味着破譯一個左值屬性訪問鏈可能是不明確的。 – johne 2009-07-20 13:31:33

+0

謝謝johne的解釋:)奇怪的選擇確實,很倒黴。 – Florian 2009-07-20 14:37:36

0

coordinatedefined爲只讀的CLLocation財產......所以看來你需要一個新的CLLocation而不是改變現有座標值。

0

盡我所能,編譯器認爲我分配給一個只讀變量。

您正在嘗試將分配給只讀屬性:

@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;

相關問題