การตั้งค่าที่อยู่เป็นคำบรรยายในคำอธิบายประกอบ

เฮ้! โดยพื้นฐานแล้วฉันต้องการย้อนกลับ geocode พิกัดของฉันสำหรับคำอธิบายประกอบของฉันและแสดงที่อยู่เป็นคำบรรยายสำหรับคำอธิบายประกอบที่เก็บไว้ (StorePosition) ฉันไม่รู้ว่าต้องทำอย่างไร ... ฉันทำอะไรผิด?

แก้ไข; .ม

    -(NSString *)subtitle{          
 return subtitle;

    - (void)setCoordinate:(CLLocationCoordinate2D)c {
        MKReverseGeocoder *rvg = [[MKReverseGeocoder alloc] initWithCoordinate:c];
        rvg.delegate = self;
        [rvg start];
        coordinate = c;
    }

    - (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {
        self.subtitle = [placemark.addressDictionary valueForKey:@"Street"]; 
    } 



คำตอบ (1)


//EDIT2: บางทีนั่นอาจช่วยแก้ปัญหาของคุณได้ ใช้ตัวกำหนดพิกัดของคุณเองและขอ Reverse Geocoder ของคุณที่นั่น:

-(NSString *)subtitle{
    if (!subtitle) {
        return @"No Street";
    } else {
        return subtitle;
    }
}

-(NSString *)title{
    return @"Saved position";
}

- (void)setCoordinate:(CLLocationCoordinate2D)c {
    MKReverseGeocoder *rvg = [[MKReverseGeocoder alloc] initWithCoordinate:c];
    rvg.delegate = self;
    [rvg start];
    coordinate = c;
}


-(id)initWithCoordinate:(CLLocationCoordinate2D) coor{
    self.coordinate=coor;
    NSLog(@"%f,%f",coor.latitude,coor.longitude);
    return self;
}

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error {
    NSLog(@"fail %@", error);
}

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {
    self.subtitle = [placemark.addressDictionary valueForKey:@"Street"];
}

// ORIGINAL:
ก่อนอื่นเรามาพูดถึงข้อบกพร่องของคุณกันดีกว่า :D

return [NSString stringWithFormat:@"%f", streetAddress];

%f ใช้สำหรับค่า float ดังนั้นจึงจะไม่แสดงสตริง
อย่างที่สอง ตัวแปร streetAddress ของคุณไม่มีอยู่ในขณะนี้ คุณควรทำให้สามารถเข้าถึงได้โดยการเขียนลงในไฟล์ส่วนหัวของคุณ

จากนั้นใน initWithCoordinate: คุณโทร return self; ทุกสิ่งหลังจากสายนี้ไม่เคยถูกโทร ดังนั้น ReverseGeocoder ของคุณอย่าเริ่มเลย

NSString *streetAddress = …

ที่นี่คุณต้องการบันทึกที่อยู่ของคุณ แต่คุณเพียงเขียนลงในตัวแปรซึ่งมีอยู่ในวิธีนี้เท่านั้น หลังจากเมธอดนี้เสร็จสิ้น ตัวแปรนี้ก็จะรีลีส คุณจะบันทึกมันลงในตัวแปรคลาสของคุณหากคุณได้กำหนดมันไว้ในไฟล์ส่วนหัวของคุณ

ตอนนี้เรามาพูดถึงวิธีที่คุณสามารถทำได้ สิ่งที่ฉันจะทำคือนำ geocoder แบบย้อนกลับออกจากคำอธิบายประกอบของคุณ และใส่ไว้ในตัวควบคุม mapView ของคุณ จากนั้น หากคุณได้รับตำแหน่งใหม่ คุณจะเปลี่ยนชื่อคำบรรยายของคำอธิบายประกอบของคุณ

[[mapView.annotations objectAtIndex:0] setSubtitle:@"Address Information"];

//แก้ไข: คุณสามารถบันทึก didFailWith ของคุณได้ และคุณจะเห็นว่าเขาไม่สามารถขอตำแหน่งได้ แม้ว่าคุณจะใส่ ReverseGeocoder-init ไว้เหนือการส่งคืน แต่ก็ยังมีเวลาไม่เพียงพอที่จะขอตำแหน่ง

person Community    schedule 29.12.2010
comment
โปรดดูที่การแก้ไข! :D ฉันไม่เข้าใจว่าจะต้องทำอย่างไรเพื่อตำแหน่ง StorePosition เช่นกัน! - person Krismutt; 30.12.2010
comment
self.coordinate=coor; จะไม่ทำงานหากเป็นแบบอ่านอย่างเดียวดังนั้นคุณจึงลบตัวเองออก (แต่ตำแหน่งเริ่มต้นจะไม่ถูกเข้ารหัสทางภูมิศาสตร์) หรือคุณเขียนทับด้วย readwrite ใน @interface เหนือ @implementation ของคุณ (ในไฟล์ .m ของคุณ) - person ; 30.12.2010
comment
ฉันได้รับข้อผิดพลาดในการสร้างสองครั้ง: ไม่ได้ประกาศ 'คำบรรยาย' (ใช้งานครั้งแรกในฟังก์ชันนี้) และไม่สามารถตั้งค่าออบเจ็กต์ได้ - คุณสมบัติอ่านอย่างเดียวหรือไม่พบตัวตั้งค่า ... ฉันเป็นมือใหม่ตัวจริง .. โปรดช่วยด้วย - person Krismutt; 30.12.2010
comment
ในไฟล์ส่วนหัวของคุณ: @property (ไม่ใช่อะตอมมิก, คัดลอก) NSString *subtitle; @property (ไม่ใช่อะตอมมิก, อ่านเขียน) พิกัด CLLocationCoordinate2D; - person ; 30.12.2010
comment
การรั่วไหลที่อาจเกิดขึ้นใน: MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:koor]; geocoder.delegate = ตนเอง; พิกัด = คูร์; - person Krismutt; 30.12.2010
comment
ใส่ autorelease] หลังจาก initWithCoordinate - person ; 30.12.2010
comment
สร้างคุณสมบัติการเก็บรักษาสำหรับ geocoder จากนั้นคุณจะเขียน self.geocoder = ... และปล่อยในภายหลัง (ใน dealloc) - person Felix; 30.12.2010
comment
นั่นดีกว่า. ฉันต้องการบันทึกคำบรรยายนี้เมื่อแอปพลิเคชันปิด....คุณรู้ไหมว่าฉันควรใช้งานอย่างไร - person Krismutt; 30.12.2010
comment
มาเลย ฉันไม่สามารถเขียนแอปที่สมบูรณ์ของคุณได้ คุณสามารถบันทึกโดยใช้ CoreData หรือไฟล์ plist เพื่อตั้งชื่อความเป็นไปได้บางส่วนเท่านั้น เริ่มอ่านเอกสารหรือทบทวนโครงการตัวอย่าง ;) - person ; 30.12.2010